Почему я не могу повторить цикл "for" для csv.Reader? (Python)

Я начинаю Python. Теперь я пытаюсь выяснить, почему второй цикл "for" не работает в следующем script. Я имею в виду, что я мог получить результат только первого цикла "за", но ничего из второго. Я скопировал и вставил script и данные csv в нижеследующее.

Будет полезно, если вы скажете мне, почему это происходит так, и как сделать второй цикл for for.

Мой SCRIPT:

import csv

file = "data.csv"

fh = open(file, 'rb')
read = csv.DictReader(fh)

for e in read:
    print(e['a'])

for e in read:
    print(e['b'])

"data.csv":

a,b,c
tree,bough,trunk
animal,leg,trunk
fish,fin,body

Ответ 1

Считыватель csv является итератором над файлом. Как только вы пройдете через него один раз, вы прочтете до конца файла, так что читать больше нечего. Если вам нужно снова пройти его, вы можете найти начало файла:

fh.seek(0)

Это будет reset файл в начале, чтобы вы могли прочитать его снова.

Если файл не слишком большой, и вам нужно сделать несколько вещей с данными, вы также можете просто прочитать все это в списке:

data = list(read)

Затем вы можете сделать то, что хотите, с помощью data.

Ответ 2

Я создал небольшую часть функции, которая делает путь к файлу чтения и возврата файла csv файла сразу, тогда вы легко просматриваете список,

def read_csv_data(path):
    """
        Reads CSV from given path and Return list of dict with Mapping
    """
    data = csv.reader(open(path))
    # Read the column names from the first line of the file
    fields = data.next()
    data_lines = []
    for row in data:
        items = dict(zip(fields, row))
        data_lines.append(items)
    return data_lines

С уважением