如何在Python中逐行读取4GB大JSON文件并转换为CSV?
解决方案:JSON Lines转CSV(大文件逐行处理)
错误原因
你的JSON文件是JSON Lines格式(每行一个独立的JSON对象),而非标准的JSON数组结构。json.load()会尝试将整个文件解析为单个JSON实体,因此第二行开始的内容会被判定为“额外数据”,触发JSONDecodeError。
修正后的代码
import json import csv # 设置CSV字段大小限制,避免大字段报错 csv.field_size_limit(10**9) # 打开JSON和CSV文件,指定编码避免乱码 with open('name.json', 'r', encoding='utf-8') as json_file, \ open('name.csv', 'w', newline='', encoding='utf-8') as data_file: csv_writer = csv.writer(data_file) header_written = False # 逐行读取并处理JSON,避免加载整个大文件到内存 for line in json_file: line = line.strip() if not line: continue # 跳过空行 try: data = json.loads(line) except json.JSONDecodeError as e: print(f"解析行失败: {e}") continue # 第一次写入表头 if not header_written: header = data.keys() csv_writer.writerow(header) header_written = True # 写入当前行的数据值 csv_writer.writerow(data.values())
代码说明
- 采用逐行读取模式,不会将4GB的整个文件加载到内存,避免内存溢出
- 处理空行和解析失败的行,提升鲁棒性
- 指定
encoding='utf-8'避免中文等非ASCII字符乱码 - 用
header_written标记替代计数器,逻辑更清晰
内容的提问来源于stack exchange,提问作者Caxa
相关产品推荐
相关产品推荐

