Python读取CSV时CParserError与NULL byte错误的编码排查

清欢
清欢
发布时间:2026-10-15 | 3人浏览过
原创

本文记录Python中读取CSV文件时常见的两个错误:CParserError提示字段数不匹配以及line contains NULL byte。通过对比直接修改后缀与“另存为”不同编码格式的操作,分析发现Excel另存为ANSI编码可解决此类解析问题。同时提供了csv模块与pandas模块对应的修正代码示例,供遇到类似编码导致解析失败的场景参考。

Python编码格式导致CSV读取错误

本文记录笔者在Python开发中遇到的两个典型问题,分别涉及csv模块和pandas库的CSV读取操作:

pandas模块报错“CParserError: Error tokenizing data. C error: Expected 1 fields in line 4, saw 2”

csv模块报错“line contains NULL byte”

今日处理数据时疏忽了细节,且为了省事将数据复制到Excel中保存后,直接修改文件后缀名为.csv以准备读取。随后在运行算法读取数据时,果然出现了上述错误。

import pandas as pd
path = 'water30.csv'
df=pd.read_csv(path)

注:后两行代码可简化为df=pd.read_csv('water30.csv')。

但由于read_csv函数本身包含众多参数(尽管此处未使用),故保留path变量写法更为规范。

这样操作会报错CParserError: Error tokenizing data. C error: Expected 1 fields in line 4, saw 2

我在网上查阅了多种解决办法,由于read_csv的参数繁多,各方案说法不一,我遇到的情况可能只是其中之一,久寻无果。直到看到有人分析模块_csv.c的代码后指出,文件中不能包含“\0”字符,因此CSV文件不应是Unicode编码,而应是ANSI编码。

针对我直接修改后缀名的操作,点击该.csv文件打开时系统已提示:


这说明单纯更改后缀名并未真正改变文件格式。因此我选择“另存为”,并将文件格式选为:

之后,读取操作便不再报错。

注:此处有一个未解疑问,即那个“直接修改后缀得到的.csv”文件,我用记事本打开查看编码显示为ANSI。因此我不明白为何仍会报错……不过问题暂时得到了解决。

现在读取到的数据格式为:

这是一个结构体对象。

另外,对于csv模块出现的“line contains NULL byte”错误,其出现原因和解决方案与上述情况一致。例如:

import csv
csvfile=file('water30.csv','rb')
reader = csv.reader(csvfile)
for line in reader:
     print line
csvfile.close()

报错信息:Error: line contains NULL byte

修正后,读入的数据格式为list列表,如下所示:

[‘1’, ‘2’, ‘2’, ‘1’, ‘2’] [‘1’, ‘1’, ‘1’, ‘2’, ‘2’] [‘1’, ‘2’, ‘1’, ‘1’, ‘1’] [‘1’, ‘1’, ‘1’, ‘1’, ‘2’] [‘1’, ‘1’, ‘1’, ‘2’, ‘2’] [‘1’, ‘1’, ‘1’, ‘2’, ‘2’] [‘0.697’, ‘0.744’, ‘0.634’, ‘0.403’, ‘0.481’] [‘0.46’, ‘0.376’, ‘0.264’, ‘0.237’, ‘0.149’] [‘1’, ‘1’, ‘1’, ‘1’, ‘1’]

pandas读取CSV常见错误及解决

1)第一种错误

错误提示:

pandas.errors.ParserError: Error tokenizing data. C error: Expected 1 fields in line 121, saw 2

解决方法:

import pandas as pd
data = pd.read_csv(inputfile, encoding='utf-8',header=None,sep = '\t')

2)第二种错误

错误提示:

pandas.errors.ParserError: Error tokenizing data. C error: EOF inside string starting at line 15945

解决方法:

import pandas as pd
import csv
df = pd.read_csv(csvfile, quoting=csv.QUOTE_NONE, encoding='utf-8')

以上为个人经验总结,希望能给大家一个参考,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表