首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在bash shell中解析python字典

在bash shell中解析python字典
EN

Stack Overflow用户
提问于 2018-01-31 07:00:58
回答 1查看 1.3K关注 0票数 2
代码语言:javascript
复制
$ query_op=$(ssh -p 29418 myreview-server.com gerrit query --files --current-patch-set --format=JSON --commit-message change:99934 | head -n 1 | python -c "import sys, json; print json.load(sys.stdin)['currentPatchSet']['files']")
$ echo $query_op
[{u'deletions': 0, u'insertions': 11, u'type': u'ADDED', u'file': u'/COMMIT_MSG'}, {u'deletions': 0, u'insertions': 2, u'type': u'MODIFIED', u'file': u'foo/bar/baz/info.txt'}]

如何查找是否有以字符串foo开头的file?在上面的例子中,我需要做一些操作,因为有一个以foo/开头的文件是foo/bar/baz/info.txt,如果在整个字典值中没有以foo/开头的文件,那么我需要做不同的操作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-02 07:33:21

正如我所说的,您可以修改Python一行程序来检查foo前缀,而不是打印出整个字典。更改它非常容易,这样Python就可以打印TrueFalse,只需用生成器表达式和any包装当前的json.loads调用

代码语言:javascript
复制
any(x['file'].startswith('foo') for x in json.load(sys.stdin)['currentPatchSet']['files'])

另一种可能使在周围的bash脚本中更容易处理输出的选择是使用Python语言中的sys.exit将结果作为Python解释器的退出代码发送,而不是作为文本发送到标准输出。方便的是,Python的bool数据类型是int的子类( True等于1False等于0),因此可以将上面代码中的any调用的结果直接传递给sys.exit,而不是print。传统上,退出代码0表示成功,而1表示失败,因此您可能需要sys.exit(not any(...))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48531897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档