Şu anda Python 2.7'deki .csv dosyalarından 1 milyon satıra ve 200 sütuna kadar veri okumaya çalışıyorum (dosyalar 100mb'den 1.6gb'ye kadar değişir). Bunu (çok yavaş) 300.000 satırın altındaki dosyalar için yapabilirim, ancak bunun üstüne çıktığımda bellek hataları alıyorum. Kodum şöyle görünüyor:
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
Getstuff fonksiyonundaki else cümlesinin nedeni, kritere uyan tüm elemanların csv dosyasında birlikte listeleneceğidir, bu yüzden onları geçince zaman kazanmak için döngüden çıkıyorum.
Sorularım:
Bunun daha büyük dosyalarla çalışmasını nasıl sağlayabilirim?
Daha hızlı yapmamın bir yolu var mı?
Bilgisayarımda 64bit Windows 7 çalıştıran 8 gb RAM var ve işlemci 3.40 GHz (hangi bilgilere ihtiyacınız olduğundan emin değil).