Просмотрите документацию для csv.reader
:
Возвращает объект чтения, который будет повторяться по строкам в данном csvfile . csvfile может быть любым объектом, который поддерживает протокол итератора и возвращает строку каждый раз, когда вызывается его метод __next__()
- подходят файловые объекты и объекты списка.
Если выВы не уверены, что такое «протокол итератора», он в основном эквивалентен тому, что происходит, когда вы перебираете какой-то объект в цикле for. Например, для list
:
>>> l = [1, 2, 3]
>>> for item in l:
... print(item)
1
2
3
То есть для list
s протокол итератора реализован «очевидным» способом, который возвращает каждый элемент списка по порядку. Для строк:
>>> s = 'row,from,csv'
>>> for char in s:
... print(char)
...
r
o
w
,
f
r
o
m
,
c
s
v
Для большинства «файловых» объектов, таких как StringIO, протокол итератора определен так, что каждый цикл возвращает одну строку текста (с завершающим символом новой строки):
>>> s = """\
... row,1
... row,2
... """
>>> b = StringIO(s)
>>> for line in b:
... print(line)
...
row,1
row,2
Таким образом, в последнем случае он обрабатывает простую строку как последовательность "строк" одного символа из CSV.