read_csv 报 ParserError: Expected 5 fields in line 3, saw 7,读取直接中断。日志里能对上时间点,这种反而好排。
字段内本身带逗号却没加引号,或者行尾多了一个分隔符,解析器仍按第一行定下的列数切,到第三行就错位,报错行号还常偏。这一点先确认清楚,后面就不用反复试。
pd.read_csv('app.log', sep='\t',
on_bad_lines='skip',
engine='python', quoting=3)
这次卡住的地方就在「pandas ParserError」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
处理上按这个顺序:用 sep 指定真实分隔符,别依赖默认逗号;加 on_bad_lines 先跳过坏行看整体分布;定位到具体行之后,统一清洗字段再重新读一遍。
结果对不对很好判断,读取不再中断,打印出的列数和列名与原始结构对得上。