【发布时间】:2013-03-14 17:06:13
【问题描述】:
我有一个包含一些数据的 json 文件,并且想偶尔更新这个文件。
我读了文件:
with open('index.json', 'rb') as f:
idx = json.load(f)
然后从潜在的新数据中检查是否存在密钥,如果密钥不存在则更新文件:
with open('index.json', mode='a+') as f:
json.dump(new_data, f, indent=4)
但是这个过程只是创建新的 json 对象(python dict)并将其作为新对象附加到输出 json 文件中,使文件不是有效的 json 文件。
有没有简单的方法通过更新初始字典将新数据附加到 json 文件而不覆盖整个文件?
【问题讨论】:
-
以
'w'模式打开文件,而不是追加+写入模式.. -
是否有实际理由不重写整个文件?这听起来可能会变得丑陋。另外,底层文件不支持“插入”操作,所以如果你的更新接近开始,你至少必须重写文件的其余部分。
-
@Martijn Pieters:这将覆盖文件(初始数据),我使用 append 因为我想附加数据。
-
@theta:这不是它的工作原理;您可能通过附加更新了 JSON 结构,但文件不是一回事。你需要重写它。