Atualmente, estou tentando ler dados de arquivos .csv no Python 2.7 com até 1 milhão de linhas e 200 colunas (os arquivos variam de 100 MB a 1,6 GB). Posso fazer isso (muito lentamente) para os arquivos com menos de 300.000 linhas, mas quando vou além disso, recebo erros de memória. Meu código é parecido com este:
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
O motivo da cláusula else na função getstuff é que todos os elementos que se enquadram no critério serão listados juntos no arquivo csv, portanto, deixo o loop quando passar por eles para economizar tempo.
Minhas perguntas são:
Como posso fazer isso funcionar com os arquivos maiores?
Existe alguma maneira de tornar isso mais rápido?
Meu computador tem 8 GB de RAM, executando o Windows 7 de 64 bits, e o processador tem 3,40 GHz (não tenho certeza de quais informações você precisa).