Python零依赖实现CSV转JSON实战

Tom 中级 1天前 更新于 2026年7月25日 161 浏览 8 点赞 约 2 分钟

为了转个CSV格式,专门安装一个几十MB的 pandas 库简直是浪费空间。其实 Python 标准库自带的 csvjson 模块完全能搞定这种简单的格式转换,而且运行速度更快,部署起来没有任何依赖压力。

这种纯净的实现方式特别适合写在轻量级的 AI Agent 脚本里,或者作为简单工作流的一个预处理步骤。

一、利用 DictReader 快速解析

很多人的习惯是手动用 .split(',') 去切分字符串,但这在遇到字段里包含逗号(比如地址信息)时会直接崩溃。最稳妥的办法是使用 csv.DictReader,它会自动把第一行作为 Key,后续每一行转成字典。

import csv

def read_csv(csv_path):
    # newline="" 是为了防止在某些操作系统上出现额外的空行
    with open(csv_path, newline="", encoding="utf-8") as f:
        reader = csv.DictReader(f)
        # 将迭代器直接转换为列表,方便后续统计数量和写入
        return list(reader)

二、处理 JSON 序列化

写入部分很简单,但有个细节建议加上:indent=2。虽然这会增加一点点文件体积,但对于调试阶段手动核对数据至关重要。

import json

def write_json(rows, json_path):
    with open(json_path, "w", encoding="utf-8") as f:
        # ensure_ascii=False 可以保证中文不被转义成 \uXXXX
        json.dump(rows, f, indent=2, ensure_ascii=False)

三、完整实操代码

把这两个功能拼在一起,我习惯在转换函数里返回处理的行数,这样在执行完脚本后能一眼看出数据是否丢失,而不需要再去打开 JSON 文件数行数。

import csv
import json

def csv_to_json(csv_path, json_path):
    # 1. 读取CSV
    with open(csv_path, newline="", encoding="utf-8") as f:
        reader = csv.DictReader(f)
        rows = list(reader)
    
    # 2. 写入JSON
    with open(json_path, "w", encoding="utf-8") as f:
        json.dump(rows, f, indent=2, ensure_ascii=False)
    
    return len(rows)

if __name__ == "__main__":
    # 假设有一个 contacts.csv 文件
    # 内容示例:
    # name,email,city
    # Alice,[email protected],Austin
    # Bob,[email protected],Denver
    try:
        count = csv_to_json("contacts.csv", "contacts.json")
        print(f"成功转换 {count} 条记录 -> contacts.json")
    except FileNotFoundError:
        print("错误:找不到 contacts.csv 文件")

四、避坑指南与实测表现

在实际部署这个脚本处理不同来源的 CSV 时,有几个点需要注意:

  • 编码坑: 很多 Excel 导出的 CSV 实际上是 gbkutf-8-sig(带 BOM 头)。如果运行报错 UnicodeDecodeError,尝试把 encoding="utf-8" 改为 encoding="utf-8-sig"
  • 内存占用: 因为我使用了 list(reader),这会将整个文件加载到内存。实测处理 5 万行左右的数据(每行 10 个字段)大约占用 40-60MB 内存,响应时间在 0.8 秒左右。但如果你要处理 GB 级别的超大文件,建议去掉 list() 转换,改用循环逐行 json.dump(虽然这会破坏 JSON 的数组格式,需要手动处理方括号和逗号)。
  • 字段一致性: DictReader 强依赖第一行表头。如果 CSV 缺失表头或者表头有重复,生成的 JSON Key 会出现覆盖,导致数据丢失。

对于大多数简单的 spreadsheet-to-API 场景,这套零依赖方案比装个大框架要优雅得多。
AI编程AI编程实战programmingpythoncoding

全部回复 (3)

副业中创业者 初级 18小时前
记得处理编码时加上 encoding='utf-8-sig',不然遇到带BOM的CSV表头会乱码。
0 回复
北漂开源爱好者 初级 18小时前
这个提醒太及时了,之前被BOM坑了好久,你还遇到过其他编码坑吗?
0 回复
杭漂码农 专家 18小时前
以前死磕 pandas 结果在服务器上装依赖装到崩溃,早知道这么简单就不用折腾了。
0 回复

发表回复

支持 Markdown 格式