我正在使用以下代码计算csv文件中的行数
with open("filepath.csv",newline='', encoding='utf-8') as csvtweet:
reader2 = csv.DictReader(csvtweet)
num_coach_tweet = sum(1 for row in reader2)
,我收到以下错误消息:
line 112, in __next__
row = next(self.reader)
_csv.Error: line contains NULL byte
我检查了StackOverflow的问题,但找不到DictReader案例的一个答案。
答案 0 :(得分:1)
在您发布的第二个文件中,文件末尾附近有一个包含五个空字节的字符串。我通过将文件预加载到内存中,替换所有空字节然后通过将数据包装在返回文件状对象的csv.DictReader
中来将其提供给StringIO
来解决该问题:
import csv
from io import StringIO
with open('5c.csv',newline='',encoding='utf8') as f:
data = f.read()
data = data.replace('\x00','?')
r = csv.DictReader(StringIO(data))
for line in r:
print(line)
倒数第四行中包含以下内容的推文:
At the 14 Fund Golf Classic. Played w/P.Berglund. Good man. Neat ?????moment: Dave Checketts...
五个问号是空字节。看来“ csv”模块明确禁止使用空字节。我也尝试过data.replace('\x00','\x01')
,就可以了。