csv.DictReader错误“ _csv.Error:行包含NULL字节”

时间:2018-10-01 02:09:27

标签: python python-3.x csv

我正在使用以下代码计算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案例的一个答案。

1 个答案:

答案 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'),就可以了。