相关疑难解决方法(0)

Python CSV错误:行包含NULL字节

我正在使用一些CSV文件,使用以下代码:

reader = csv.reader(open(filepath, "rU"))
try:
    for row in reader:
        print 'Row read successfully!', row
except csv.Error, e:
    sys.exit('file %s, line %d: %s' % (filename, reader.line_num, e))
Run Code Online (Sandbox Code Playgroud)

一个文件抛出此错误:

file my.csv, line 1: line contains NULL byte
Run Code Online (Sandbox Code Playgroud)

我能做什么?谷歌似乎暗示它可能是一个Excel文件被不正当地保存为.csv.有什么方法可以解决Python中的这个问题吗?

==更新==

按照下面@ JohnMachin的评论,我尝试将这些行添加到我的脚本中:

print repr(open(filepath, 'rb').read(200)) # dump 1st 200 bytes of file
data = open(filepath, 'rb').read()
print data.find('\x00')
print data.count('\x00')
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

'\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1\x00\x00\x00\x00\x00\x00\x00\x00\ .... <snip>
8
13834
Run Code Online (Sandbox Code Playgroud)

所以该文件确实包含NUL字节.

python csv

92
推荐指数
7
解决办法
11万
查看次数

在python 3中继承文件对象(以扩展打开和关闭操作)

假设我想在内部openclose时间使用额外的操作来扩展内置文件抽象.在Python 2.7中,这适用于:

class ExtFile(file):
    def __init__(self, *args):
        file.__init__(self, *args)
        # extra stuff here

    def close(self):
        file.close(self)
        # extra stuff here
Run Code Online (Sandbox Code Playgroud)

现在我正在考虑将程序更新为Python 3,其中open是一个工厂函数,它可能会从io模块中返回任何几个不同类的实例,具体取决于它的调用方式.我原则上可以将它们全部子类化,但这很乏味,而且我必须重新实现这样open做的调度.(在Python 3中,二进制文件和文本文件之间的区别比2.x更重要,我需要两者.)这些对象将被传递给库代码,这些代码可能与它们做任何事情,所以这些成语制作一个"类文件"的duck-typed类来包装返回值open和转发必要的方法将是最冗长的.

任何人都可以建议3.x方法,除了显示的2.x代码之外,尽可能少的额外样板吗?

python python-3.x

20
推荐指数
3
解决办法
1万
查看次数

标签 统计

python ×2

csv ×1

python-3.x ×1