如何批量读取同文件夹下多个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
相关产品推荐
相关产品推荐

