¿Por qué no puedo repetir el bucle ‘for’ para csv.Reader?

Soy un principiante de Python. Ahora estoy intentando averiguar por qué el segundo bucle ‘for’ no funciona en la siguiente secuencia de comandos. Quiero decir que solo pude obtener el resultado del primer bucle ‘for’, pero nada del segundo. Copié y pegué mi script y los datos csv a continuación.

Será útil si me dices por qué sucede de esta manera y cómo hacer que el segundo bucle ‘for’ también funcione.

Mi 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 

El lector csv es un iterador sobre el archivo. Una vez que lo repasas una vez, lees hasta el final del archivo, así que no hay más que leer. Si necesita volver a revisarlo, puede buscar al principio del archivo:

 fh.seek(0) 

Esto restablecerá el archivo al principio para que pueda leerlo nuevamente. Dependiendo del código, también puede ser necesario omitir el encabezado del nombre del campo:

 next(fh) 

Esto es necesario para su código, ya que el DictReader consumió esa línea la primera vez para determinar los nombres de los campos, y no volverá a hacerlo. Puede no ser necesario para otros usos de csv .

Si el archivo no es demasiado grande y necesita hacer varias cosas con los datos, también podría leer todo en una lista:

 data = list(read) 

Entonces puedes hacer lo que quieras con los data .

He creado una pequeña parte de la función que toma la ruta del archivo csv y devuelve la lista de dictados a la vez y luego recorres la lista muy fácilmente.

 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 

Saludos