首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python -c标志更新json文件?

如何使用python -c标志更新json文件?
EN

Stack Overflow用户
提问于 2020-09-24 05:54:55
回答 1查看 88关注 0票数 1

这在python shell中有效,但当我使用python -c执行它时,这里的语法错误是什么?

我只需要更新文件myjson.json中的一个值

代码语言:javascript
复制
python3.6 -c "import json; with open('myjson.json', 'r+') as jsonFile:  data = json.load(jsonFile); data['root']['target']['branch'][0] = 'updated_value'; jsonFile.seek(0); json.dump(data, jsonFile, indent=4); jsonFile.truncate()"
  File "<string>", line 1
    import json; with open('myjson.json', 'r+') as jsonFile:  data = json.load(jsonFile);  data['root']['target']['branch'][0] = 'updated_value'; jsonFile.seek(0); json.dump(data, jsonFile, indent=4); jsonFile.truncate()
                    ^
SyntaxError: invalid syntax
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-24 06:04:13

Python的语法几乎与缩进结合在一起,并且在一行上不能很好地工作。特别是,许多语句,包括withif,在它们之前不能有任何其他语句(具体地说,我相信任何缩进的语句,即具有尾随冒号的语句)。因此,无论是在Python shell、Python脚本还是-c参数中,这都是无效的:

代码语言:javascript
复制
a = 1; if a == 1: print(a)

它必须写成

代码语言:javascript
复制
a = 1
if a == 1: print(a)

代码语言:javascript
复制
a = 1
if a == 1:
    print(a)

如果要从shell传递这样的程序,则必须在-c参数中传递一个换行符。例如,在bash

代码语言:javascript
复制
python3 -c $'a = 1\nif a == 1: print(a)'

( bash语法$'...'引用字符串的方式可以识别诸如\n之类的控制序列。)

编辑:这是问题的字面答案。DYZ在评论中说,试图将Python混合成一行程序并不是一个很好的实践,这一点是绝对正确的。创建脚本文件是有意义的。如果由于某种原因你不能,使用heredoc文档将会极大地提高可读性:

代码语言:javascript
复制
cat << EOF | python3
a = 1
if a == 1:
    print(a)
EOF

EDIT2:有更好的工具可以更新JSON文件中的值,如果您不使用Python语言这样做的话。最简单的工具是jq,它存在的全部原因就是操纵JSON:

代码语言:javascript
复制
jq '.root.target.branch[0] = "updated_value"' myjson.json
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64036803

复制
相关文章

相似问题

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