_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(), потому что он автоматически закроет файл при ошибке или при выходе из контекста.