_csv.Error: iterator должен возвращать строки, а не байты (вы открыли файл в текстовом режиме?)
В начале моей программы csv:
import csv # imports the csv module
import sys # imports the sys module
f = open('Address Book.csv', 'rb') # opens the csv file
try:
reader = csv.reader(f) # creates the reader object
for row in reader: # iterates the rows of the file in orders
print (row) # prints each row
finally:
f.close() # closing
И ошибка:
for row in reader: # iterates the rows of the file in orders
_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
Ответы
Ответ 1
Вместо этого (и остальных):
f = open('Address Book.csv', 'rb')
Сделайте это:
with open('Address Book.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)
Диспетчер контекста означает, что вам не нужен finally: f.close()
, потому что он автоматически закроет файл при ошибке или при выходе из контекста.
Ответ 2
Решение в этом (дублированном?) вопросе csv.Error: iterator должен возвращать строки, а не байты, помог мне:
f = open('Address Book.csv', "rt")
или
with open('Address Book.csv', "rt") as f:
или (с помощью gzip)
import gzip
f = gzip.open('Address Book.csv', "rt")
или
import gzip
gzip.open('Address Book.csv', "rt") as f: