如何将每行一个JSON文档的12GB大文件转换为单个JSON列表?
你当前使用的是行式JSON(JSON Lines)格式,要转换为标准JSON数组,且文件大小为12GB,优先选择流式处理方案(不需要加载整个文件到内存),可落地的实现方案如下:
方案1:Linux/macOS 命令行实现(最高效,优先推荐)
全程流式处理,内存占用不超过10MB,处理12GB文件耗时仅取决于磁盘读写速度,普通机械硬盘预计10-20分钟即可完成。
操作步骤
- 先向输出文件写入JSON数组的开头标识符
echo "[" > output.json - 流式处理原文件的每一行:每行前面加3个空格、末尾加逗号,最后一行去掉末尾的逗号,追加到输出文件
sed 's/^/ /;s/$/,/' input.jsonl | sed '$ s/,$//' >> output.json - 最后写入JSON数组的结尾标识符
echo "]" >> output.json
方案2:跨平台Python实现(兼容Windows环境)
全平台通用,自动跳过空行,内存占用极低,适合没有命令行工具的场景使用。
INPUT_FILE = "你的原文件路径.jsonl" OUTPUT_FILE = "输出文件路径.json" INDENT = " " # 对应示例里的3空格缩进,不需要缩进可设置为空字符串 with open(OUTPUT_FILE, "w", encoding="utf-8") as out_f: out_f.write("[\n") first_line = True with open(INPUT_FILE, "r", encoding="utf-8") as in_f: for line in in_f: stripped_line = line.strip() if not stripped_line: continue if not first_line: out_f.write(",\n") out_f.write(f"{INDENT}{stripped_line}") first_line = False out_f.write("\n]")
注意事项
- 处理前请提前备份原文件,避免操作失误导致数据丢失
- 若原文件存在不符合JSON格式的行,可先使用
jq工具做数据清洗:jq -c . input.jsonl > cleaned_input.jsonl,该命令会过滤掉所有不合法的JSON行,仅保留格式正确的内容 - 处理前请确保目标磁盘预留至少13GB的空闲空间,避免输出文件写入时磁盘占满导致任务失败
内容的提问来源于stack exchange,提问作者Jeet Patel
相关产品推荐
相关产品推荐

