如何使用Python实现CSV文件转JSON文件 附实现代码示例
CSV转JSON代码问题分析与优化建议
现有代码是否能正确实现需求?
不能,现有代码存在几处明显错误,运行会直接报错或无法得到预期结果:
- 输出文件名硬编码错误:写JSON文件时没有使用传入的输出路径参数
js,而是写死了字符串'cleanedhm',最终不会生成你预期的mydatalist.json文件 - 文件打开模式错误:写JSON文件时使用了
open默认的只读模式r,没有指定写入模式w,运行时会直接抛出IO错误,无法写入任何内容 - 潜在数据丢失风险:如果CSV文件中
hmid字段存在重复值,后读取的行数据会直接覆盖之前同key的内容,导致部分数据丢失 - 注释缩进不规范:
# dumping the data的缩进位置错误,落在了遍历CSV行的for循环内,虽然不影响运行,但不符合代码逻辑也不符合编码规范
可优化点
1. 修复基础错误,调整后可直接运行的参考代码如下:
import csv import json def convjson(csv_path, json_path, key_field='hmid'): mydata = {} # 读取CSV内容 with open(csv_path, encoding='utf-8') as csvfile: csv_reader = csv.DictReader(csvfile) # 校验key字段是否存在 if key_field not in csv_reader.fieldnames: raise ValueError(f"CSV文件中不存在指定的key字段:{key_field}") for row in csv_reader: mykey = row[key_field] mydata[mykey] = row # 写入JSON文件 with open(json_path, 'w', encoding='utf-8') as jsonfile: # 加ensure_ascii=False避免中文等非ASCII字符被转义 json.dump(mydata, jsonfile, indent=4, ensure_ascii=False) # 调用示例 if __name__ == '__main__': cleanedhm = r'mydatalist.csv' js = r'mydatalist.json' convjson(cleanedhm, js)
2. 其他可优化方向
- 增加异常捕获:可以捕获文件不存在、权限不足等异常,抛出更友好的提示信息,避免程序直接崩溃
- 提升通用性:把key字段作为可配置参数传入,不需要写死为
hmid,适配不同结构的CSV文件 - 大文件适配:如果处理GB级别的大CSV文件,可以改成流式写入逻辑,不需要把所有数据加载到内存中,降低内存占用
- 支持输出数组格式:如果不需要以
hmid为key的字典结构,可直接把所有行存入列表写入JSON,适配不同的下游使用场景 - 补充类型提示:给函数参数、返回值加上类型提示,提升代码可读性和可维护性
内容的提问来源于stack exchange,提问作者Hemanth Tadepalli
相关产品推荐
相关产品推荐

