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

骑手

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

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

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
阿玛丹

Python的语法非常适合缩进,并且不能在一行上很好地工作。特别是,包括with在内的许多语句if在它们之前不能有其他任何语句(特别是,我相信任何缩进的语句,即带有尾随冒号的语句)。因此,无论在Python Shell,Python脚本还是-c参数中,这都是无效的

a = 1; if a == 1: print(a)

它必须写成

a = 1
if a == 1: print(a)

要么

a = 1
if a == 1:
    print(a)

如果要从shell传递此类程序,则必须将换行符传递给-c参数。例如,在bash

python3 -c $'a = 1\nif a == 1: print(a)'

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

编辑:这是问题的字面答案。DYZ在评论中绝对正确,因为将Python混入单一代码行不是一个好习惯。制作脚本文件很有意义。如果出于某种原因而无法使用,则使用Heredoc将大大提高可读性:

cat << EOF | python3
a = 1
if a == 1:
    print(a)
EOF

EDIT2:如果可以不用Python进行更新,还有更好的工具可以更新JSON文件中的值。最简单的一个是jq,该工具的存在的全部原因是在处理JSON:

jq '.root.target.branch[0] = "updated_value"' myjson.json

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章