Python csv.reader读取CSV返回行列表格式错误的解决方法
CSV读取时整行被识别为单个元素的修复方案
出现该问题的核心原因是csv解析器没有正确识别行内的字段分隔规则,按以下优先级排查即可:
- 优先修复文件打开参数的错误写法
Python官方csv模块明确要求,打开csv文件时必须传入newline=''参数,否则跨平台下会出现换行符解析错误,直接导致整行被判定为单个字段。同时建议显式指定文件编码和引号解析规则,避免字段带多余引号的问题。
修正后的基础读取代码:
注意:你当前代码在循环内直接import csv with open(filename, "r", newline="", encoding="utf-8") as csvfile: t_reader = csv.reader( csvfile, delimiter=",", quotechar='"' ) for row in t_reader: print(row)return row只会返回第一行内容,如果需要读取所有行,需要提前初始化列表逐行追加。 - 校验文件实际使用的分隔符
不要仅凭文件后缀判断分隔符,很多.csv格式的文件实际使用制表符\t、分号;作为字段分隔符。可以先读取原始行确认真实分隔符:
如果输出内容里字段间是with open(filename, "r", encoding="utf-8") as f: # repr会显示所有不可见转义字符,能直接看到字段间的分隔符号 print(repr(f.readline()))\t间隔,就把reader的delimiter参数改为"\t";如果是分号间隔则改为";"。 - 处理Windows Excel导出的BOM头问题
如果你的CSV是通过Windows端Excel另存为的UTF-8格式文件,默认会携带UTF-8 BOM头,这种情况需要把打开文件的编码参数改为encoding="utf-8-sig",否则BOM头会被识别为普通字符,干扰解析规则。
按以上步骤调整后,读取到的row就会是预期的多元素拆分列表,比如["a", "b", "c", "d"]、['1','2','3','4','5']。
附问题中提到的CSV文件结构截图:
内容的提问来源于stack exchange,提问作者Michelle Liu
相关产品推荐
相关产品推荐

