csv.Error:迭代器应该返回string,而不是字节

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中运行上面的代码,我得到了以下exception

文件“csvformat.py”,第4行,在行阅读:_csv.Error:迭代器应该返回string,而不是字节(你是否在文本模式下打开文件?

我该如何解决?

您在文本模式下打开文件。

进一步来说:

 ifile = open('sample.csv', "rt", encoding=<theencodingofthefile>) 

对编码的好猜测是“ascii”和“utf8”。 您也可以closures编码,它将使用系统默认的编码,这往往是UTF8,但可能是别的。

我只是用我的代码解决了这个问题。 抛出这个exception的原因是因为你有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) 

你的问题是你有open标志中的b 。 标志rt (read,text)是默认的,所以,使用上下文pipe理器,只需要这样做:

 with open('sample.csv') as ifile: read = csv.reader(ifile) for row in read: print (row) 

上下文pipe理器意味着你不需要通用的error handling(没有这个error handling,你可能会被打开的文件,特别是在解释器中),因为它会自动closures错误文件或退出上下文。

以上是一样的:

 with open('sample.csv', 'r') as ifile: ... 

要么

 with open('sample.csv', 'rt') as ifile: ... 

运行用Python 2.6.4开发的旧python脚本时出现此错误

当更新到3.6.2时,我不得不从打开的调用中删除所有'rb'参数,以解决这个csv读取错误。