Attualmente sto cercando di leggere i dati dai file .csv in Python 2.7 con un massimo di 1 milione di righe e 200 colonne (i file vanno da 100 MB a 1,6 GB). Posso farlo (molto lentamente) per i file con meno di 300.000 righe, ma una volta che vado sopra ottengo errori di memoria. Il mio codice ha questo aspetto:
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
La ragione per la clausola else nella funzione getstuff è che tutti gli elementi che soddisfano il criterio saranno elencati insieme nel file csv, quindi lascio il ciclo quando li supero per risparmiare tempo.
Le mie domande sono:
Come posso farlo funzionare con i file più grandi?
C'è un modo per renderlo più veloce?
Il mio computer ha 8 GB di RAM, esegue Windows 7 a 64 bit e il processore è 3,40 GHz (non è sicuro di quali informazioni hai bisogno).