← 中文资源

简体中文版本

流式把 CSV 转为 NDJSON

用流式读写把大型 CSV 转为按行分隔的 JSON,使内存占用不随文件大小增长。

阅读英文原文

目标

批量导入需要 NDJSON,但把整份 CSV 载入内存再转换会打爆工作进程。本配方用 csv.DictReader 逐行读取并即时写入一行一个 JSON 对象,使内存保持恒定;同时对已知数值列做类型转换、显式指定编码,避免下游拿到字符串或乱码。

步骤要点

  1. 逐行读取 CSV 并即时写入一行一个 JSON。
  2. 对已知数值列做类型转换。
  3. 两侧都显式指定 utf-8 编码。
  4. 抽查首行是否为合法 JSON 并核对行数。
import csv, json
with open('in.csv', newline='') as fin, open('out.ndjson', 'w') as fout:
    for row in csv.DictReader(fin):
        fout.write(json.dumps(row, ensure_ascii=False) + '\n')

排错提示

  • 不转换类型会让数值都变成字符串。
  • 编码未指定会导致乱码。
  • 流式无法跨行排序或聚合。

适用边界

  • 不能跨行排序或聚合。
  • 类型需显式规则。