import csv
with open(path, newline='', encoding='utf-8-sig') as f:
for row in csv.reader(f):
save(row)
收货地址写成 "北京市朝阳区,建国路 88 号",用 split(',') 切出来 14 列,模板只有 12 列,手机号那一列读到了备注内容,1200 条订单地址全错位。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,引号里的逗号属于字段内容,按分隔符硬切会把它当成列边界,后面的字段整体右移。字段里还有转义双引号时,偏移会继续累积。
这次卡住的地方就在「CSV 逗号错位」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
处理上按这个顺序:换成标准库 csv.reader 让它处理引号和转义;读之前确认文件是逗号分隔还是制表符分隔 分隔符显式传进去;拿一条带引号的地址做单行回归 打印列数和每列值。
改完只确认一件事:同一条地址解析出 12 列,地址完整保留逗号,手机号落在第 5 列,抽样 100 条全部对得上。
