读取csv文件时,行包含空字节错误

时间:2017-11-12 07:20:19

标签: python csv

我尝试使用以下格式的代码读取csv文件。

def csv_dict_reader(file_obj):
    reader = csv.reader(file_obj, delimiter=',')
    for row in reader:
        # some operation

file = open("data.csv", "r")
csv_dict_reader(file)

我已经提到了here给出的解决方案,但它们似乎都不起作用。可能是最可能的原因。

错误:

    for row in reader:
_csv.Error: line contains NULL byte

1 个答案:

答案 0 :(得分:1)

该文件包含一个或多个与CSV读取器不兼容的NULL字节。作为一种解决方法,您可以在一段时间内读取文件,如果检测到NULL字节,则将其替换为空格字符。然后,可以通过CSV读取器通过将结果字符串转换为类似对象的文件来解析生成的行。请注意,默认情况下的分隔符为,,因此不需要指定。通过添加enumerate(),您可以显示文件中的哪些行包含NULL字节。

当您使用DictReader()时,需要额外的步骤才能使用普通csv.reader()从文件中提取标头。此行可用于手动指定fieldnames的{​​{1}}参数。

DictReader

最后,当使用import csv import StringIO with open('data.csv', 'rb') as f_input: # Use a normal CSV reader to get the header line header = next(csv.reader(f_input)) for line_number, raw_line in enumerate(f_input, start=1): if '\x00' in raw_line: print "Line {} - NULL found".format(line_number) raw_line = raw_line.replace('\x00', ' ') row = next(csv.DictReader(StringIO.StringIO(raw_line), fieldnames=header)) print row 时,您应该以二进制模式打开文件,例如csv.reader()