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: итератор должен возвращать строки, а не байты (вы открывали файл в текстовом режиме?)
Как я могу это исправить?
python
python-3.x
csv
Пика Волшебник китов
источник
источник
Я только что исправил эту проблему с моим кодом. Причина, по которой это исключение, в том, что у вас есть аргумент
rb
. Измени это наr
.Ваш код:
Новый код:
источник
Ваша проблема у вас есть
b
вopen
флаге. Флагrt
(чтение, текст) является значением по умолчанию, поэтому, используя менеджер контекста, просто сделайте это:Диспетчер контекста означает, что вам не нужна общая обработка ошибок (без которой вы можете застрять с открытым файлом, особенно в интерпретаторе), поскольку он автоматически закроет файл при ошибке или при выходе из контекста.
Вышеуказанное совпадает с:
или
источник
with
Заявление он же менеджер контекста не имеет ничего общего с этим вопросом, на всех!В Python3
csv.reader
ожидает, что переданный итеративный возвращает строки, а не байты. Вот еще одно решение этой проблемы, которое используетcodecs
модуль:источник
У меня была эта ошибка при запуске старого скрипта Python, разработанного с Python 2.6.4
При обновлении до 3.6.2 мне пришлось удалить все параметры 'rb' из открытых вызовов, чтобы исправить эту ошибку чтения csv.
источник