如何使用open()追加模式向内容为列表的.json文件追加数据?
关于JSON文件追加元素的低开销方案
结论先行
直接使用a+模式调用json.dump无法实现你要的效果,会生成不符合JSON语法的无效文件,但可以通过调整文件写入指针偏移的方案实现无需读取全量文件内容的追加操作,完全满足你处理千万级文件的性能需求。
原因说明
你现有的JSON文件内容是标准的数组结构,末尾以]闭合:
[{"Alice" : 1, "Betty": 2}]
如果直接用追加模式写入新对象,新内容会直接拼接在]之后,最终结果如下,完全无法被JSON解析器识别:
[{"Alice" : 1, "Betty": 2}]{"Alice": 10, "Betty": 20}
可行实现方案
利用文件指针直接定位到末尾]的位置,覆盖写入追加内容后再补全闭合符即可,不需要读取整个文件内容:
import json # 待追加的新数据 new_item = {"Alice": 10, "Betty": 20} file_path = "TEST.json" with open(file_path, "r+", encoding="utf-8") as f: # 指针移动到文件末尾前1位(对应]的位置,适用于无尾部空白的场景) f.seek(-1, 2) # 写入逗号分隔新旧元素 f.write(",") # 写入新元素 json.dump(new_item, f) # 补全数组闭合符 f.write("]")
注意事项
- 如果你的JSON文件末尾存在换行、空格等多余空白字符,需要先往前查找
]的实际位置再移动指针,避免定位错误 - 该方案仅适用于JSON根节点为数组的场景,和你当前的文件结构完全匹配
内容的提问来源于stack exchange,提问作者DirTaeng
相关产品推荐
相关产品推荐

