这在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
发布于 2020-09-23 22:04:13
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:有更好的工具可以更新JSON文件中的值,如果您不使用Python语言这样做的话。最简单的工具是jq
,它存在的全部原因就是操纵JSON:
jq '.root.target.branch[0] = "updated_value"' myjson.json
https://stackoverflow.com/questions/64036803
复制相似问题