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: iterator должен возвращать строки, а не байты (вы открыли файл в текстовом режиме?)
Как я могу это исправить?
Ответы
Ответ 1
Вы открываете файл в текстовом режиме.
Более конкретно:
ifile = open('sample.csv', "rt", encoding=<theencodingofthefile>)
Хорошими предположениями для кодирования являются "ascii" и "utf8". Вы также можете оставить кодировку выключенной, и она будет использовать кодировку по умолчанию системы, которая имеет тенденцию быть UTF8, но может быть чем-то еще.
Ответ 2
Я просто исправил эту проблему с помощью моего кода. Причина, по которой это исключение, заключается в том, что у вас есть аргумент 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)
Ответ 3
У вас проблема с 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:
...
Ответ 4
У меня была эта ошибка при запуске старого python script, разработанного с помощью Python 2.6.4
При обновлении до 3.6.2 мне пришлось удалить все параметры "rb" из вызовов open, чтобы исправить эту ошибку чтения csv.