不使用for读取csv文件
我需要在Python中读取一个CSV文件。
因为在最后一行我遇到了'NULL字节'的错误,所以我想避免使用for关键字,而是用while。
你知道怎么做吗?
reader = csv.reader( file ) for row in reader # I have an error at this line # do whatever with row
我想用while循环替代for循环,这样我就可以检查这一行是否是NULL。
在CSV模块中,读取单行的函数是什么?谢谢
谢谢
附注:下面是错误追踪信息
Traceback (most recent call last): File "FetchNeuro_TodayTrades.py", line 189, in for row in reader: _csv.Error: line contains NULL byte
8 个回答
2
Django社区已经解决了Python在导入CSV文件时的一些问题,所以你可以去那里搜索一下关于CSV导入的内容,或者直接发个问题问问。此外,你也可以在尝试导入之前,直接在CSV文件中修改出错的那一行。
4
你需要(总是)准确地告诉我们你遇到的错误信息。请修改一下你的问题。
可能是这个:
>>> import csv; csv.reader("\x00").next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
_csv.Error: line contains NULL byte
>>>
csv模块不支持8位字符;具体可以查看文档:“目前有一些关于ASCII NUL字符的问题。”
错误信息本身也有问题:应该是"NUL",而不是"NULL" :-(
如果文件的最后一行是空的,你不会收到异常提示,只会得到row == []
。
假设问题出在你的文件中有一个或多个NUL字符,你需要(1)认真和文件的创建者沟通(2)如果不行,就以二进制模式(mode="rb")读取整个文件,去掉NUL字符,然后把fixed_text.splitlines()
传给csv读取器。
20
也许你可以捕捉到CSV读取器抛出的异常。可以这样做:
filename = "my.csv"
reader = csv.reader(open(filename))
try:
for row in reader:
print 'Row read with success!', row
except csv.Error, e:
sys.exit('file %s, line %d: %s' % (filename, reader.line_num, e))
或者你可以使用 next()
:
while True:
try:
print reader.next()
except csv.Error:
print "Error"
except StopIteration:
print "Iteration End"
break