这在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] 删除。
我来说两句