目标
批量导入需要 NDJSON,但把整份 CSV 载入内存再转换会打爆工作进程。本配方用 csv.DictReader 逐行读取并即时写入一行一个 JSON 对象,使内存保持恒定;同时对已知数值列做类型转换、显式指定编码,避免下游拿到字符串或乱码。
步骤要点
- 逐行读取 CSV 并即时写入一行一个 JSON。
- 对已知数值列做类型转换。
- 两侧都显式指定 utf-8 编码。
- 抽查首行是否为合法 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')
排错提示
- 不转换类型会让数值都变成字符串。
- 编码未指定会导致乱码。
- 流式无法跨行排序或聚合。
适用边界
- 不能跨行排序或聚合。
- 类型需显式规则。