读取65MB逗号分隔CSV文件报错,指定engine=python仍触发ParserError的原因
为什么指定
engine="python"仍会触发CSV ParserError? 别急,这个问题其实和你选Python引擎没关系——Python引擎只是比C引擎更兼容一些边缘情况,但它依然得遵守CSV的基本语法规范,你遇到的',' expected after '"'错误,本质是你的CSV文件本身存在格式不规范的问题,和引擎类型无关。
具体来说,最常见的几个原因:
- 未正确转义的嵌套引号:比如某个字段里出现了未转义的双引号,比如
"Customer said "I want a refund""。CSV标准里,字段内的双引号需要用两个双引号转义(比如"Customer said ""I want a refund"""),不管用Python还是C引擎,遇到未转义的引号都会搞混字段的起始和结束位置,后续的逗号自然就不在预期的位置了。 - 未闭合的引号导致跨行解析混乱:如果某一行的字段用引号开头,但没在该行闭合,Python引擎会把下一行的内容当作当前字段的一部分继续读取,直到找到闭合的引号。这时候后面的字段分隔符位置完全错乱,就会抛出这个错误。
- 编码问题伪装成语法错误:虽然你指定了
encoding="ISO-8859-1",但如果文件实际编码不是这个,可能会把一些字节解析成奇怪的引号或字符,干扰CSV的语法解析。
给你几个实用的解决方向:
- 手动修复CSV格式:用VS Code这类支持大文件的编辑器打开你的65MB CSV,搜索未转义的双引号,按照CSV标准替换成两个双引号;同时检查有没有未闭合的引号行。
- 调整
pd.read_csv的参数:- 如果你的文件是用反斜杠转义引号的(比如
"He said \"hello\""),可以加escapechar='\\'参数; - 试试
quoting=csv.QUOTE_NONE(需要先导入csv模块),但这个会把所有引号当作普通字符,可能导致字段拆分错误,谨慎使用; - 临时用
error_bad_lines=False跳过错误行,但会丢失数据,只适合临时排查问题。
- 如果你的文件是用反斜杠转义引号的(比如
- 先确认文件编码:用
chardet模块检测一下文件的真实编码,确保encoding参数设置正确——编码错误有时候会伪装成语法解析错误。
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

