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 行,出错位置: for row in read : _csv.Error: 迭代器应该返回字符串,而不是字节(你是以文本模式打开文件的吗?)
我该如何解决这个问题?
7 个回答
50
在Python3中,csv.reader
希望你传入的可迭代对象返回的是字符串,而不是字节。这里有一个解决这个问题的办法,它使用了codecs
模块:
import csv
import codecs
ifile = open('sample.csv', "rb")
read = csv.reader(codecs.iterdecode(ifile, 'utf-8'))
for row in read :
print (row)
121
出现这个错误的原因是因为你使用了参数 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)
250
你以文本模式打开文件。
更具体来说:
ifile = open('sample.csv', "rt", encoding=<theencodingofthefile>)
常见的编码方式有“ascii”和“utf8”。你也可以不指定编码,这样它会使用系统默认的编码,通常是UTF8,但也可能是其他编码。