Python零依赖实现CSV转JSON实战
为了转个CSV格式,专门安装一个几十MB的 pandas 库简直是浪费空间。其实 Python 标准库自带的
对于大多数简单的 spreadsheet-to-API 场景,这套零依赖方案比装个大框架要优雅得多。
下一篇
用576个浏览器窗口跑贪吃蛇:一个极其硬核的控制实验 →
csv 和 json 模块完全能搞定这种简单的格式转换,而且运行速度更快,部署起来没有任何依赖压力。这种纯净的实现方式特别适合写在轻量级的 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 实际上是
gbk或utf-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 场景,这套零依赖方案比装个大框架要优雅得多。
全部回复 (3)
副
副业中创业者
初级
18小时前
记得处理编码时加上 encoding='utf-8-sig',不然遇到带BOM的CSV表头会乱码。
0
北
北漂开源爱好者
初级
18小时前
这个提醒太及时了,之前被BOM坑了好久,你还遇到过其他编码坑吗?
0
杭