Python 标准库实现 CSV 到 JSON 转换的高效做法
在 AI Agent 脚本或数据预处理环节中,用纯 Python 完成 CSV 到 JSON 的转换可以避免引入任何外部依赖。核心思路是借助 csv.DictReader 读取结构化数据,再通过 json.dump 输出为标准的 JSON 格式,既保证了执行效率,也维持了代码的轻量与可移植性。
使用 csv.DictReader 直接读取文件,能够自动把首行识别为字典的键,后续每一行都映射为一个字典对象,省去了手动按逗号拆分字段的麻烦。字段内部即使包含逗号也不会被错误切割,配合 newline="" 参数打开文件,还能避免在 Windows 与 Linux 之间出现多余的空行。读取完成后若用 list(reader) 包裹,就能方便地统计记录总数或传给后续处理逻辑。
输出 JSON 时,建议开启 indent=2 参数让文件结构更直观,方便调试阶段快速定位问题。同时必须设置 ensure_ascii=False,否则中文字符会被转义成 \uXXXX 格式,导致生成的文件失去可读性。写入过程指定 encoding="utf-8",可以确保多语言文本正确保存。
将读取和写入整合成一个函数,能直接返回处理的记录数,无需额外检查输出文件即可确认数据完整性。不过 list(reader) 会把所有数据一次性加载到内存中,实测 5 万行、10 个字段的 CSV 大约占用 40-60MB 内存,耗时约 0.8 秒。面对 GB 级别的大文件,应放弃 list() 改为逐行写入,但这样每行都会成为独立的 JSON 对象,不再保持标准的数组结构。
几个实际使用中容易踩坑的地方值得留意。Excel 导出的 CSV 常带有 BOM 头或使用 gbk 编码,如果直接以 utf-8 读取可能抛出 UnicodeDecodeError,这时把编码参数调整为 utf-8-sig 可以兼容 BOM 头。大文件处理时务必避免全量载入,否则可能引发内存溢出。此外,DictReader 依赖唯一的首行作为字段名,若表头缺失或重复,会导致生成的 JSON 中键被覆盖或数据丢失,对于非标准 CSV 需要提前清洗表头或手动指定字段名。
在团队协作中,Python 环境配置和依赖同步常常成为效率瓶颈。2025 年出现的 uv 工具正在改变这一现状,它由 Astral 开发,用 Rust 语言编写,能够快速安装任意 Python 版本、管理虚拟环境并解决依赖冲突,且不会影响已有的 Python 安装。在处理大规模数据转换任务时,借助 uv 统一团队的运行环境,可以减少因环境差异导致的脚本行为不一致问题。
全部回复 (3)
想当场把话说完?进全球 AI 聊天室,登录就能开口。
直接用内置 csv 模块秒杀 pandas,再也不用在服务器上跟 pip 打架了!比如直接用 csv.DictReader 读取 CSV 文件,它能自动处理嵌套逗号的字段,避免 .split(',') 失效,还能用 newline="" 参数防止跨平台空行问题,直接转为列表方便后续处理。这样不仅避免引入几十 MB 的 pandas 库,还能保证数据稳健解析。
utf-8-sig 这个细节太关键了,上次被 BOM 头搞得崩溃了一下午!顺手把打开 CSV 的代码改成
open(..., newline='', encoding='utf-8')并使用csv.DictReader,一次就能规避 BOM 和字段内逗号导致的解析错误。UTF-8 BOM这个坑太深了,每次只要碰到这种编码问题,整个JSON解析就全乱套。比如,Excel导出的CSV文件常含BOM头或使用
gbk编码,若触发UnicodeDecodeError,可以通过在open()函数中指定encoding="utf-8-sig"来自动处理BOM头,同时确保能正确解析中文字符。