我有一个CSV文件,其中有一些数据嵌入了NUL字节。
给定列A B C D列C中的一个字段将具有类似
的数据,引用字符“一些数据”NUL“更多数据”NUL“数据结束”引用字符,
当我使用LIBRE Office Calc打开它时,NUL字符不会出现在显示屏上,如果我手动保存它们,它们就会消失。我可以在vi中看到NUL字符,并且可以在vi中用tr或手动删除或替换它们,但我希望能够自动使用python程序来处理它。
DictReader进程是
对于infile中的行:抛出异常,因此except在循环之外并且不会返回以获取下一行(或允许我将NUL字符更改为空格或嵌入式逗号并处理该行)
幸运的是,数据似乎有其他失效因此我可能会在任何情况下跳过它。但问题是如何告诉Python转到下一行。
答案 0 :(得分:1)
所以这有点难看,但似乎有效。您可以读取正常的行,清除有问题的字节,然后使用StringIO对象将其传递给DictReader。这是代码,假设你的csv有一个标题记录(如果你没有,它应该更简单):
#!/usr/bin/env python
import StringIO
import csv
import ipdb
fin = open('somefilewithnulls', 'rb')
fout = StringIO.StringIO()
reader = csv.DictReader(fout)
while True:
# for the first record prep StringIO with the first
# two lines so DictReader can create header
line = fin.readline() if fin.tell() else fin.readline() + fin.readline()
if not len(line):
break
# clean the line before passing it to DictReader
line = line.replace('\x00', '')
fout.write(line)
fout.seek(-len(line), 1)
rec = reader.next()
print rec