2010-07-09 16 views

Respuesta

4

Simplemente tiene que analizar todo el archivo CSV, y luego usar la indexación de secuencia normal.

De lo contrario, puede hacer algo como esto

def my_filter(csv_file, lines): 
    for line_number, line in enumerate(csv_file): 
     if line_number in lines: 
      yield line 

my_file = open("file.csv") 
my_reader = csv.reader(my_filter(my_file, (3,))) 

Tenga en cuenta que no se puede evitar que sea interpretado todo el archivo, de una manera o de otra, porque las líneas son de longitud variable. El recuento de líneas solo avanza cuando se encuentra un '\ n', y debe encontrarse carácter por carácter.

Además, este filtro no funcionará si tiene caracteres de nueva línea dentro de comillas en el archivo csv; probablemente sea mejor que analice todo el archivo en una lista y recupere los índices desde allí, de todos modos:

my_file = open("file.csv") 
my_reader = csv.reader(my_file) 
my_line = list(my_reader)[3] 

actualización lo más importante: si necesita acceso aleatorio a la información que es demasiado grande para caber en la memoria, basta con considerar deshacerse de ellos a una base de datos SQL en lugar. Le ahorrará a uno reinventar muchas ruedas.

+0

seguro. el archivo es demasiado grande para leer todo en la memoria a la vez. Planeo acceder a todas las líneas, pero también necesito saltar el archivo y evitar cargar todo al mismo tiempo. – ahhh

+0

SO, la solución de filtro lo ayudará a usted (siempre que no tenga \ n dentro de los valores literales). Si necesita acceso fuera de servicio, la solución de filtro puede usarse para crear una lista como en el último ejemplo. – jsbueno

Cuestiones relacionadas