如何在Python中将多个TXT文件转换为JSON数据并合并?
解决Python单引号字典格式文件的读取与合并问题
错误原因
json.loads 严格遵循JSON规范,要求键名和字符串必须用双引号,但你的文件内容是Python原生字典格式(单引号),直接用JSON解析必然报错。
单文件读取修复方案
改用Python标准库的 ast.literal_eval,它可以安全解析Python字面量(包括单引号字典、列表等),代码如下:
import ast with open('00e6f05f-a395-4ad0-b10c-e5ff575d26b7.txt', encoding='utf-8') as f: content = f.read().strip() file_content = ast.literal_eval(content) print(file_content)
批量合并多文件的两种方案
方案1:合并为字典列表
适合每个TXT文件对应一个独立字典,最终汇总成列表:
import ast import os all_data = [] # 替换为你的文件目录,当前目录用"."即可 target_dir = "." for filename in os.listdir(target_dir): if filename.endswith(".txt"): file_path = os.path.join(target_dir, filename) with open(file_path, encoding='utf-8') as f: content = f.read().strip() if not content: continue try: data = ast.literal_eval(content) all_data.append(data) except Exception as e: print(f"处理文件 {filename} 出错: {e}") # 写入合并后的结果,可选择Python原生格式或标准JSON格式 with open("merged_data.txt", "w", encoding='utf-8') as f: # 保留Python单引号格式 f.write(repr(all_data)) # 转成标准JSON格式(双引号)请用下面一行替换: # import json; f.write(json.dumps(all_data, ensure_ascii=False, indent=2))
方案2:合并为单个大字典
适合每个文件的字典无重复键,或允许后续文件键值覆盖前面的:
import ast import os merged_dict = {} target_dir = "." for filename in os.listdir(target_dir): if filename.endswith(".txt"): file_path = os.path.join(target_dir, filename) with open(file_path, encoding='utf-8') as f: content = f.read().strip() if not content: continue try: data = ast.literal_eval(content) merged_dict.update(data) except Exception as e: print(f"处理文件 {filename} 出错: {e}") # 写入合并后的字典 with open("merged_dict.txt", "w", encoding='utf-8') as f: f.write(repr(merged_dict)) # 转JSON格式请替换为: # import json; f.write(json.dumps(merged_dict, ensure_ascii=False, indent=2))
关键注意点
ast.literal_eval比直接用eval安全,不会执行恶意代码,仅解析合法Python字面量。- 无论字典内容是单行还是多行,
f.read().strip()都能正常读取,无需拆分行拼接。 - 合并字典时,重复键会被后续文件的键值覆盖,若需保留所有重复键,可修改逻辑为按文件名存储对应字典。
内容的提问来源于stack exchange,提问作者А А
相关产品推荐
相关产品推荐

