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

如何批量读取同文件夹下多个JSON文件并按规则合并为统一字典

多JSON文件按规则合并实现方案

需求背景

我有多个存放在同一文件夹下的文本文件,每个文件内部存储如下结构的JSON(不同文件对应数值存在差异):

{"abandon": {"R1F2V0CQAYJOZZ": 2, "R3NUFWQ9SPGVJO": 1}, "abduct": {"R1F2V0CQAYJOZZ": 1, "R3376OQSHCTV1A": 1, "R14BW4EQZNVKKG": 1, "R233CMES8RCOCU": 1}}

格式化后结构如下:

{
  "abandon":{
    "R1F2V0CQAYJOZZ":2,
    "R3NUFWQ9SPGVJO":1
  },
  "abduct":{
    "R1F2V0CQAYJOZZ":1,
    "R3376OQSHCTV1A":1,
    "R14BW4EQZNVKKG":1,
    "R233CMES8RCOCU":1
  }
}

上述JSON结构含义为:

{
  "word":{
    "Document name":"value"
  }
}

不同文件中存在重复的word键,需要读取所有文件并按规则合并存储到一个字典中。

合并规则

  • 若合并字典中已存在当前word,检查该word下是否存在对应document键
  • 若该document键已存在,将对应value累加,不存在则新增该document键并设置value为1
  • 若合并字典中不存在当前word,则新增该word、对应document键并设置value为1

合并示例

假设有两个文件:

  • File1.txt内容:
{"abandon": {"doc1": 2, "doc2": 1}, "abduct": {"doc1": 1, "doc2": 1, "doc8": 1}}
  • File2.txt内容:
{"abandon": {"doc1": 1, "doc3": 1}, "abduct": {"doc5": 1, "doc8": 1}}

最终期望合并结果:

{"abandon": {"doc1": 3, "doc2": 1, "doc3": 1}, "abduct": {"doc1": 1, "doc2": 1, "doc5": 1, "doc8": 2}}

补充说明:最终结果也可以是嵌套列表格式。

实现代码(Python)

import os
import json
from collections import defaultdict

# 初始化嵌套字典结构用于存储合并结果
merged_dict = defaultdict(lambda: defaultdict(int))

# 替换为你的JSON文件所在文件夹路径
folder_path = "./your_json_files_folder"

# 遍历文件夹下所有文件
for filename in os.listdir(folder_path):
    # 只处理后缀为txt的文件,可根据实际后缀调整
    if filename.endswith(".txt"):
        file_path = os.path.join(folder_path, filename)
        with open(file_path, "r", encoding="utf-8") as f:
            # 加载JSON内容
            file_content = json.load(f)
            # 遍历每个单词和对应的文档计数字典
            for word, doc_counts in file_content.items():
                # 遍历每个文档和计数
                for doc, count in doc_counts.items():
                    # 累加计数
                    merged_dict[word][doc] += count

# 转换为普通字典(可选,方便后续序列化)
final_result = {word: dict(doc_counts) for word, doc_counts in merged_dict.items()}

# 打印格式化结果
print(json.dumps(final_result, ensure_ascii=False, indent=2))

# 如需导出为JSON文件取消注释下行
# with open("./merged_result.json", "w", encoding="utf-8") as f:
#     json.dump(final_result, f, ensure_ascii=False, indent=2)

内容的提问来源于stack exchange,提问作者ObamaVEVO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:45:07