2009-01-10 29 views

Respuesta

62

Puede buscar el archivo directamente. Por ejemplo:

>>> f = open("csv.txt") 
>>> c = csv.reader(f) 
>>> for row in c: print row 
['1', '2', '3'] 
['4', '5', '6'] 
>>> f.seek(0) 
>>> for row in c: print row # again 
['1', '2', '3'] 
['4', '5', '6'] 
+1

Esto realmente comienza de nuevo, pero si el archivo tiene una fila de encabezado, devolverá los nombres de las columnas como los "valores" para la primera fila. Entonces, si estás usando un DictReader, obtendrás una fila como esta: "{'name': 'name', 'dob': 'dob', 'email': 'email}" –

+0

Cualquier forma de hacer lo mismo si solo tiene una referencia al lector y no al manejador del archivo? Estoy escribiendo una función que toma un lector como entrada, escanea todas las filas y (idealmente) luego restablece la ubicación del archivo para buscar (0) después del análisis. Idealmente, no tendríamos que pasar el parámetro de archivo también a esta función y la firma de la función sería simplemente: 'csv_aggregate (reader, agg_functions, reset_after_calc = True)' ¿Podemos usar 'reader._file.seek (0) 'o algo similar? – aaronsteers

10

puede seguir utilizando file.seek (0). Por ejemplo, observe lo siguiente:

import csv 
file_handle = open("somefile.csv", "r") 
reader = csv.reader(file_handle) 
# Do stuff with reader 
file_handle.seek(0) 
# Do more stuff with reader as it is back at the beginning now 

Esto debería funcionar ya que csv.reader está trabajando con lo mismo.

+0

gracias mucho :) – Nope

+8

aunque incluya la file_handle.seek (0) hace el trabajo, el recuento reader.line_num no reconfiguradas por lo que si desea utilizar esto más adelante, entonces tendrás problemas . por supuesto, puede repetir el 'reader = csv.reader (file_handle)' después de la búsqueda (0) pero esto no funciona correctamente si lo tiene dentro de un bucle externo 'para row in reader:' como 'reader.line_num 'no aumenta Si reemplaza el ciclo for por un tiempo, eso soluciona ese problema, pero no está muy seguro de qué hace para ordenar la situación del final del archivo en la última lectura. – jacanterbury

Cuestiones relacionadas