要解决的问题
CSV 字段可以包含换行,文本文件的行数不一定等于记录数。遇到导入条数异常时,先检查是否把 CSV 当作普通行文本处理。下面故意给第一条备注加入换行和逗号,展示正确读取方式。
适用环境
Python 3.12,标准库,无需安装第三方包;示例完全在内存中运行。
操作步骤与示例
先运行下面的小样本,再把输入替换为自己的资料;保留原始文件副本。
import csv
import io
rows = [dict(code="001", note='第一行,带逗号'+chr(10)+'第二行"引号"'),
dict(code="002", note="普通备注")]
buffer = io.StringIO(newline="")
writer = csv.DictWriter(buffer, fieldnames=["code", "note"])
writer.writeheader()
writer.writerows(rows)
buffer.seek(0)
parsed = list(csv.DictReader(buffer))
assert parsed == rows
print(len(parsed), parsed[0]["code"])如何判断结果
预期输出 2 001。这里有两条记录,即使备注跨越多行,编号也仍然保留前导零。使用文件时,应按实际编码打开,并把 newline 设置为空字符串,让 CSV 解析器处理换行规则。
常见问题与排查
若列名不对,先确认分隔符、表头和 BOM;如果数据不是逗号分隔,不能仅靠默认参数读取。引号是否闭合也应核对。不要因为看到了额外文本行,就简单删掉该行。
适用边界
这个例子验证标准逗号和双引号 CSV 的往返结果,不推断未知文件的编码或业务字段类型。合并多个来源前,应先确认各文件的列定义与格式约定。