CSV读取器中出现"行包含NULL字节"(Python)
我正在尝试写一个程序,这个程序会读取一个 .CSV 文件(input.csv),然后只重写那些以特定元素开头的行,结果会保存在另一个文件(corrected.csv)中,这个特定元素是在一个文本文件(output.txt)里列出的。
现在我的程序大概是这样的:
import csv
lines = []
with open('output.txt','r') as f:
for line in f.readlines():
lines.append(line[:-1])
with open('corrected.csv','w') as correct:
writer = csv.writer(correct, dialect = 'excel')
with open('input.csv', 'r') as mycsv:
reader = csv.reader(mycsv)
for row in reader:
if row[0] not in lines:
writer.writerow(row)
可惜的是,我总是遇到一个错误,我完全不知道这个错误是什么原因。
Traceback (most recent call last):
File "C:\Python32\Sample Program\csvParser.py", line 12, in <module>
for row in reader:
_csv.Error: line contains NULL byte
感谢所有在 这里 帮助我的人,让我能走到这一步。
15 个回答
25
如果你想把空值(null)替换成其他东西,可以这样做:
def fix_nulls(s):
for line in s:
yield line.replace('\0', ' ')
r = csv.reader(fix_nulls(open(...)))
89
我猜你的input.csv文件里有一个NUL字节。你可以用下面的代码来检查一下:
if '\0' in open('input.csv').read():
print "you have null bytes in your input file"
else:
print "you don't"
如果确实有的话,
reader = csv.reader(x.replace('\0', '') for x in mycsv)
可能可以帮你解决这个问题。或者这也可能意味着你的.csv文件里有utf16编码或者其他一些“有趣”的东西。
82
我用一个更简单的方法解决了一个类似的问题:
import codecs
csvReader = csv.reader(codecs.open('file.csv', 'rU', 'utf-16'))
关键是使用codecs模块来以UTF-16编码打开文件,实际上还有很多其他的编码方式,具体可以查看文档。