Actualmente estoy tratando de leer datos de archivos .csv en Python 2.7 con hasta 1 millón de filas y 200 columnas (los archivos oscilan entre 100 MB y 1,6 GB). Puedo hacer esto (muy lentamente) para los archivos con menos de 300,000 filas, pero una vez que voy por encima de eso, obtengo errores de memoria. Mi código se ve así:
def getdata(filename, criteria):
data=[]
for criterion in criteria:
data.append(getstuff(filename, criteron))
return data
def getstuff(filename, criterion):
import csv
data=[]
with open(filename, "rb") as csvfile:
datareader=csv.reader(csvfile)
for row in datareader:
if row[3]=="column header":
data.append(row)
elif len(data)<2 and row[3]!=criterion:
pass
elif row[3]==criterion:
data.append(row)
else:
return data
El motivo de la cláusula else en la función getstuff es que todos los elementos que se ajustan al criterio se enumerarán juntos en el archivo csv, así que dejo el bucle cuando los supere para ahorrar tiempo.
Mis preguntas son:
¿Cómo puedo hacer que esto funcione con archivos más grandes?
¿Hay alguna forma de hacerlo más rápido?
Mi computadora tiene 8 GB de RAM, ejecuta Windows 7 de 64 bits y el procesador es de 3,40 GHz (no estoy seguro de qué información necesita).