如何使用Python脚本合并同一文件夹内的多个JSONL文件
JSONL多文件合并Python实现方法
首先你需要先安装jsonlines依赖库,执行命令:pip install jsonlines
原有针对标准JSON文件的脚本不适用于JSONL格式的核心原因:
- 标准JSON是单个完整的JSON结构,可一次性读取为单个对象;但JSONL(JSON Lines)的特性是每行对应一个独立的JSON对象,不能直接用
json.load读取整个文件 - 原有逻辑用
append会把单个文件的所有内容作为一个元素加入结果,合并后结构不符合预期,需要改为逐行读取对象后追加
方案1:内存友好版(大文件适用,边读边写)
该方案无需将所有文件内容加载到内存,适合处理GB级别的大体积JSONL文件:
import glob import jsonlines # 合并后输出的文件路径 output_path = "merged_file.jsonl" with jsonlines.open(output_path, mode="w") as outfile: # 遍历当前文件夹下所有后缀为.jsonl的文件,可自行修改匹配规则 for f in glob.glob("*.jsonl"): with jsonlines.open(f, mode="r") as infile: # 逐行读取JSON对象直接写入输出文件 for entry in infile: outfile.write(entry)
方案2:全量加载版(适合小文件,需要预处理数据的场景)
如果需要先把所有数据加载到内存做清洗、去重等操作,可使用该版本:
import glob import jsonlines import json result = [] for f in glob.glob("*.jsonl"): with jsonlines.open(f, mode="r") as infile: # 把当前文件所有JSON对象扩展到结果列表 result.extend(infile) # 输出为JSONL格式 with jsonlines.open("merged_file.jsonl", mode="w") as outfile: outfile.write_all(result) # 如果你需要输出为标准JSON数组格式,可替换为下面的输出逻辑 # with open("merged_file.json", mode="w", encoding="utf-8") as outfile: # json.dump(result, outfile, ensure_ascii=False, indent=2)
注意事项
- 如果你的JSONL文件后缀不是
.jsonl,修改glob.glob里的匹配规则即可,比如后缀为.json就改为*.json - 写入时如果需要保留中文等非ASCII字符,可在
jsonlines.open或json.dump中添加ensure_ascii=False参数
内容的提问来源于stack exchange,提问作者MFatn
相关产品推荐
相关产品推荐

