如何用Python将返回数据写入JSON文件?解决仅存最后一条记录问题
解决JSON文件仅写入最后一条记录的问题
兄弟,我太懂你这情况了——肯定是你在循环处理每个文件的时候,每次都用w模式打开JSON文件,直接写入当前的单条记录,这样每次写入都会把之前的内容覆盖掉,最后自然只剩最后一条啦。
给你两种靠谱的解决方案,优先选第一种,简单又不容易出错:
方法一:先收集所有记录,一次性写入(推荐)
核心思路是先把所有统计出来的记录都存到一个列表里,等所有文件都处理完了,再把整个列表写入JSON文件。这样既保证了JSON格式的正确性,又避免了重复覆盖的问题。
错误示例(你现在可能的写法)
import json # 循环处理每个文件 for file_name in ["test1.txt", "test2.txt"]: # 这里是你的单词统计逻辑,得到当前记录 record = {"file Name": file_name, "searched Word": "th", "number of occurence": 1} # 问题出在这:每次用w模式打开,会覆盖之前的内容 with open("result.json", "w") as f: json.dump([record], f)
修正后的代码
import json # 创建空列表,用来存所有记录 all_records = [] # 循环处理每个文件 for file_name in ["test1.txt", "test2.txt"]: # 执行你的单词统计逻辑,得到当前记录 record = {"file Name": file_name, "searched Word": "th", "number of occurence": 1} # 把当前记录添加到列表里 all_records.append(record) # 所有记录收集完成后,一次性写入文件 with open("result.json", "w") as f: json.dump(all_records, f, indent=4) # indent=4让JSON格式更美观,可省略
方法二:追加写入(适合超大数据量场景)
如果你的文件特别多,数据量极大,不想把所有记录都放到内存里,可以用追加的方式,但要注意JSON的格式规范(因为JSON数组需要用逗号分隔元素)。这种方法稍微麻烦点,步骤如下:
- 检查文件是否存在:如果不存在,先写入
[,再写入第一条记录; - 如果文件已存在,先移动到文件末尾,删除最后的
],然后写入逗号+新记录,最后再加上]。
示例代码参考:
import json import os file_path = "result.json" # 循环处理每个文件 for file_name in ["test1.txt", "test2.txt"]: record = {"file Name": file_name, "searched Word": "th", "number of occurence": 1} record_str = json.dumps(record) if not os.path.exists(file_path): # 文件不存在,写入数组开头和第一条记录 with open(file_path, "w") as f: f.write(f"[{record_str}]") else: # 文件已存在,追加新记录 with open(file_path, "rb+") as f: # 移动到文件末尾,去掉最后的']' f.seek(-1, os.SEEK_END) f.truncate() # 写入逗号、新记录和']' f.write(f",{record_str}]".encode())
不过还是强烈推荐第一种方法,除非你真的遇到内存不够的情况,不然第一种更省心,不容易出格式错误。
内容的提问来源于stack exchange,提问作者Py Dev
相关产品推荐
相关产品推荐

