用 Python 清洗 CSV 并导出 JSON:一个可以运行的小例子

把表格交给脚本处理之前,先明确哪些数据能自动修改。本例只处理四件事:去掉字段两端空格、忽略重复编号、跳过缺编号的行,以及拒绝空姓名。它不会猜测姓名、自动改金额或替你修复业务事实。

用 Python 清洗 CSV 并导出 JSON:一个可以运行的小例子的概念插图
AI生成的主题插图,用于说明文章主题,不是产品实测截图。

准备一份小输入文件

在新的练习目录中创建people.csv,内容如下。第二条编号前后的空格、重复编号和最后一行空姓名,都是刻意准备的测试数据。

id,name
1,小林
 2 , 小周 
2,重复记录
3,

字段内若包含逗号,应遵守CSV的引号规则,而不是自己用字符串split处理。Python标准库的csv模块会处理这些格式细节。

编写清洗脚本

import csv
import json
from pathlib import Path

source = Path("people.csv")
output = Path("people.json")
rows = []
seen = set()

with source.open(encoding="utf-8-sig", newline="") as f:
    reader = csv.DictReader(f)
    if not {"id", "name"}.issubset(reader.fieldnames or []):
        raise ValueError("CSV必须包含id和name两列表头")
    for row in reader:
        ident = (row.get("id") or "").strip()
        name = (row.get("name") or "").strip()
        if not ident or not name or ident in seen:
            continue
        seen.add(ident)
        rows.append({"id": ident, "name": name})

output.write_text(
    json.dumps(rows, ensure_ascii=False, indent=2),
    encoding="utf-8",
)
print(f"保留 {len(rows)} 条,输出到 {output}")

保存为clean_csv.py后,在同一目录运行python3 clean_csv.py。脚本会覆盖当前目录同名的people.json;请先用练习文件,不要直接覆盖重要业务数据。

核对输出,而不是只看执行成功

给定上面的输入,输出应只保留编号1和2,其中编号2的姓名是“小周”。编号按字符串保存,因此“001”和“1”会被视为不同值;是否应合并需要由业务规则决定。

[
  {"id": "1", "name": "小林"},
  {"id": "2", "name": "小周"}
]

这个输入与结果已作为本地小样例运行核对。若实际表格有额外列,本例只导出id和name两列,不能当作保留所有原始字段的通用转换器。

接入真实数据前补两项记录

正式任务至少应记录跳过了多少行、每一类跳过原因是什么,并为输出使用新的文件名。数据量大时,还要考虑是否需要分块处理或数据库,而不是一次把全部数据装进内存。

最值得保留的是这份小测试数据。以后修改规则,先运行它确认基本行为没有改变,再用脱敏后的真实样本验证。

资料与延伸阅读

继续阅读:先给项目创建虚拟环境 · 数据质量如何影响知识库回答

资料查阅与编辑日期:2026年9月22日。作者:玖柒。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享