You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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数组需要用逗号分隔元素)。这种方法稍微麻烦点,步骤如下:

  1. 检查文件是否存在:如果不存在,先写入[,再写入第一条记录;
  2. 如果文件已存在,先移动到文件末尾,删除最后的],然后写入逗号+新记录,最后再加上]。

示例代码参考:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:44:42