如何将JSON数据列表写入CSV文件并优化现有代码
JSON列表数据写入CSV的优化方案
原代码存在的问题
- 变量名不匹配:定义表头变量为
headers,写入表头时调用了未定义的header;循环内生成的行列表为l,写入时调用了未定义的data,会直接抛出异常 - 逻辑判断错误:
if j in json_response是判断键是否存在于整个JSON列表中,而非当前遍历的单条数据字典,取值时误将整条字典i存入列表,输出内容完全错误 - 资源管理缺陷:未使用上下文管理器托管文件对象,程序异常中断时会出现文件句柄泄漏,资源无法正常释放
- 执行效率低下:双层循环逐列判断拼接、逐行写入的逻辑冗余,面对大体量数据时IO耗时会大幅上升
优化后实现方案
核心优化点
- 采用
csv.DictWriter原生适配字典结构数据,无需手动拼接每行列值,代码简洁度和可读性大幅提升 - 用
with上下文管理器自动管理文件生命周期,无需手动调用close(),异常场景也能安全释放资源 - 指定
utf-8-sig编码避免Windows系统下打开CSV出现乱码,新增newline=''参数避免写入后出现多余空行 - 内置
restval参数直接指定缺失键的默认填充值,省去手动判断赋值的冗余逻辑 - 调用
writerows()批量写入所有数据,大幅减少IO操作次数,对大体量数据场景的性能提升显著
优化代码
import csv headers = ['id', 'name', 'num', 'Country'] with open('file.csv', 'w', encoding='utf-8-sig', newline='') as f: writer = csv.DictWriter(f, fieldnames=headers, restval='none') # 写入表头 writer.writeheader() # 批量写入所有数据 writer.writerows(json_response)
超大体量数据额外优化
如果数据量级达到十万条以上,可以引入pandas进一步提升写入效率:
import pandas as pd headers = ['id', 'name', 'num', 'Country'] # 生成DataFrame并自动填充缺失值为none df = pd.DataFrame(json_response, columns=headers).fillna('none') # 写入CSV,不保留索引列 df.to_csv('file.csv', index=False, encoding='utf-8-sig')
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

