问题:csv.Error:迭代器应返回字符串,而不是字节
Sample.csv包含以下内容:
NAME Id No Dept
Tom 1 12 CS
Hendry 2 35 EC
Bahamas 3 21 IT
Frank 4 61 EE
Python文件包含以下代码:
import csv
ifile = open('sample.csv', "rb")
read = csv.reader(ifile)
for row in read :
print (row)
当我在Python中运行上述代码时,出现以下异常:
文件“ csvformat.py”,第4行,在已读行中表示:_csv.Error:迭代器应返回字符串,而不是字节(您是否以文本模式打开文件?)
我该如何解决?
回答 0
您以文本模式打开文件。
进一步来说:
ifile = open('sample.csv', "rt", encoding=<theencodingofthefile>)
编码的不错猜测是“ ascii”和“ utf8”。您还可以关闭编码,它将使用系统默认编码,该编码通常为UTF8,但可能还有其他含义。
回答 1
我只是用我的代码解决了这个问题。引发该异常的原因是因为您有参数rb
。更改为r
。
您的代码:
import csv
ifile = open('sample.csv', "rb")
read = csv.reader(ifile)
for row in read :
print (row)
新代码:
import csv
ifile = open('sample.csv', "r")
read = csv.reader(ifile)
for row in read :
print (row)
回答 2
您的问题是您b
在open
标志中。该标志rt
(读取,文本)是默认设置,因此,使用上下文管理器只需执行以下操作:
with open('sample.csv') as ifile:
read = csv.reader(ifile)
for row in read:
print (row)
上下文管理器意味着您不需要常规的错误处理(如果没有这种处理,您可能会卡在打开文件中,尤其是在解释器中),因为它会在发生错误或退出上下文时自动关闭文件。
上面是一样的:
with open('sample.csv', 'r') as ifile:
...
要么
with open('sample.csv', 'rt') as ifile:
...
回答 3
csv.reader
期望在Python3中,传递可迭代的返回字符串,而不是字节。这是使用codecs
模块的另一解决方案:
import csv
import codecs
ifile = open('sample.csv', "rb")
read = csv.reader(codecs.iterdecode(ifile, 'utf-8'))
for row in read :
print (row)
回答 4
运行使用Python 2.6.4开发的旧python脚本时出现此错误
更新到3.6.2时,我必须从打开的调用中删除所有“ rb”参数,以修复此csv读取错误。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。