羽梦羽笔记MENGYU NOTES
笔记/Python
Python

处理 CSV 之前,先确认这四件事

编码、分隔符、表头与空值,看似细小,却决定了一份数据能否被正确读取。

看到一个以 .csv 结尾的文件,并不能直接确定它的编码、分隔符和字段含义。比起立即清洗,先用小样本确认读取方式,能避免后面的步骤建立在错误的数据上。

编码:能够打开不代表没有问题

如果来源明确声明为 UTF-8,可以按约定读取。部分带有字节顺序标记的文件,使用 utf-8-sig 读取可以去掉文件开头的标记。遇到解码错误时,应先确认来源编码,不建议直接忽略错误字符。

分隔符与换行

逗号、分号和制表符都可能出现在导出数据里。字段内部也可能包含逗号和换行,因此不要简单地按逗号拆分每一行。使用 CSV 解析器,并按来源约定指定分隔符。

import csv
from pathlib import Path

path = Path("sample.csv")
with path.open(encoding="utf-8-sig", newline="") as handle:
    reader = csv.DictReader(handle)
    print("字段:", reader.fieldnames)
    for index, row in enumerate(reader):
        if index == 5:
            break
        print(row)

表头:检查重复与空格

读取后先打印字段名,检查是否存在前后空格、空字段或重复名称。尤其是重复表头,可能导致字段映射时丢失信息。遇到问题应先修正表头约定,再处理整份文件。

空值:先理解,再转换

空字符串、零、“无”和“不适用”可能表达不同含义。编号和电话号码即使只包含数字,也不应随意转换为数值,否则可能丢掉开头的零。清洗规则应记录下来,原始文件则单独保留。

先检查读取结果,再写清洗逻辑;先保留原始数据,再生成处理后的新文件。
✳

记录方法,也保留问题。
本文属于「Python」专题。

继续阅读专题 →
← 全部笔记下一篇:让脚本留下线索:一份实用的日志思路 →

搜索覆盖文章正文 · Esc 关闭