2010-05-19 19 views
19

Estoy tratando de verificar el valor de los datos extraídos contra un csv que ya tengo. Solo recorrerá las filas del CSV una vez, solo puedo verificar un valor de feed.items(). ¿Hay algún valor que deba restablecer en algún lugar? ¿Hay una forma mejor/más eficiente de hacer esto? Gracias.¿Lectura repetida de CSV en Python?

orig = csv.reader(open("googlel.csv", "rb"), delimiter = ';') 
goodrows = [] 
for feed in gotfeeds:  
    for link,comments in feed.items(): 
     for row in orig: 
      print link 
      if link in row[1]: 
       row.append(comments) 
       goodrows.append(row) 

Respuesta

27

Puede "reset" el iterador CSV restableciendo la posición de lectura del objeto de archivo.

data = open("googlel.csv", "rb") 
orig = csv.reader(data, delimiter = ';') 
goodrows = [] 
for feed in gotfeeds:  
    for link,comments in feed.items(): 
     data.seek(0) 
     for row in orig: 
      print link 
      if link in row[1]: 
       row.append(comments) 
       goodrows.append(row) 
+0

Funciona muy bien, gracias. Mi archivo es pequeño para el futuro cercano, pero odiaría tener que rastrear por qué es lento en un par de meses. – matt

7

Hacer una lista orig evita la necesidad de restablecer/reanálisis de la CSV:

orig = list(csv.reader(open("googlel.csv", "rb"), delimiter = ';')) 
+4

Esto funcionará técnicamente, pero hará que todo el archivo CSV se cargue en la memoria. No es un gran problema si el archivo es pequeño, pero esto no se escalará. – Cerin

+0

@Chris. Cierto. Si el archivo csv es enorme, espero que lo mencione en la pregunta, pero ciertamente hay espacio para nuestras interpretaciones. – unutbu

+0

Estoy de acuerdo con Chris S. Nos enfrentamos al mismo problema ... eventualmente nuestros archivos CSV obtuvieron hasta 5gb por pieza. Huelga decir que fue una pesadilla – dassouki