python Dict读取CSV文件,数据中包含NULL字节

时间:2014-01-07 21:08:46

标签: python design-patterns csv

我有一个CSV文件,其中有一些数据嵌入了NUL字节。

给定列A B C D列C中的一个字段将具有类似

的数据

,引用字符“一些数据”NUL“更多数据”NUL“数据结束”引用字符,

当我使用LIBRE Office Calc打开它时,NUL字符不会出现在显示屏上,如果我手动保存它们,它们就会消失。我可以在vi中看到NUL字符,并且可以在vi中用tr或手动删除或替换它们,但我希望能够自动使用python程序来处理它。

DictReader进程是

对于infile中的行:抛出异常,因此except在循环之外并且不会返回以获取下一行(或允许我将NUL字符更改为空格或嵌入式逗号并处理该行)

幸运的是,数据似乎有其他失效因此我可能会在任何情况下跳过它。但问题是如何告诉Python转到下一行。

1 个答案:

答案 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