Obecnie próbuję odczytać dane z plików .csv w Pythonie 2.7 z maksymalnie 1 milionem wierszy i 200 kolumnami (zakres plików od 100 MB do 1,6 GB). Mogę to zrobić (bardzo powoli) dla plików z mniej niż 300 000 wierszy, ale gdy przejdę powyżej, pojawiają się błędy pamięci. Mój kod wygląda tak:
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
Powodem zastosowania klauzuli else w funkcji getstuff jest to, że wszystkie elementy, które pasują do kryterium, zostaną wymienione razem w pliku csv, więc zostawiam pętlę, gdy mijam je, aby zaoszczędzić czas.
Moje pytania to:
Jak mogę to zrobić z większymi plikami?
Czy jest jakiś sposób, żebym mógł to przyspieszyć?
Mój komputer ma 8 GB pamięci RAM, 64-bitowy system Windows 7, a procesor ma 3,40 GHz (nie wiem, jakich informacji potrzebujesz).