Печать всех строк CSV в Python работает только один раз

#python

Вопрос:

Я написал очень простую программу, которая должна была прочитать CSV и распечатать все строки дважды. Однако, когда я запустил программу, она напечатала все строки в первый раз и ничего во второй раз.

Код:

 import csv

csvfile = csv.reader(open(<path>, 'rb'))

print 'Attempt 1'
for row in csvfile:
    print row

print 'Attempt 2'
for row in csvfile:
    print row
 

Выход:

 Attempt 1
['a', 'b', 'c']
['d', 'e', 'f']
Attempt 2
 

Почему код не печатает содержимое снова во второй раз?

Ответ №1:

Вам нужно rewind открыть файл:

 import csv

csvfile = csv.reader(open(<path>, 'rb'))

print 'Attempt 1'
for row in csvfile:
    print row

csvfile.seek(0, 0)

print 'Attempt 2'
for row in csvfile:
    print row
 

Таким образом, это должно работать нормально.

Ответ №2:

Поправьте меня, если я ошибаюсь, но я почти уверен csvfile , что переменная, которую вы создаете, является объектом генератора.

Генераторы не хранятся в памяти, а могут быть повторены только один раз!

Надеюсь, это поможет, Люк