Python脚本更新JSON文件异常:更新key2时误新增条目求解决方案
问题分析与解决
你的代码出现「新增条目而非更新原有内容」的问题,核心原因有两个:
- 使用
r+模式打开文件时,读取完内容后文件指针停在文件末尾,直接执行json.dump(item, list)会把单个条目追加到原文件尾部,而非覆盖原有内容 - 错误地逐个写入修改后的单条数据,而非将整个修改完成的
data对象整体写入文件
另外还有个细节错误:list.close没有加括号,这不会实际触发文件关闭操作,正确写法是list.close()
正确实现代码
方法一:分两次打开文件(读、写分离,逻辑更直观)
import json # 读取文件中的JSON数据 with open('file.json', 'r') as f: data = json.load(f) # 遍历更新所有条目的key2值 for item in data['list']: item['key2'] = "newValue" # 字典直接赋值比update更简洁,效果一致 # 写入修改后的完整数据('w'模式会自动清空原文件内容) with open('file.json', 'w') as f: json.dump(data, f, indent=4) # indent=4用于格式化输出,和原文件格式保持一致
方法二:单文件句柄读写(手动控制指针与截断)
import json with open('file.json', 'r+') as f: # 读取数据 data = json.load(f) # 更新所有条目 for item in data['list']: item['key2'] = "newValue" # 将文件指针移到开头,截断原有内容,再写入新数据 f.seek(0) f.truncate() json.dump(data, f, indent=4)
执行任意一种方法后,你都会得到期望的结果:
{ "list": [ { "key1": "value1", "key2": "newValue" }, { "key1": "value1", "key2": "newValue" } ] }
内容的提问来源于stack exchange,提问作者Younes Ben Tlili
相关产品推荐
相关产品推荐

