You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:45:03