Ich versuche derzeit, Daten aus CSV-Dateien in Python 2.7 mit bis zu 1 Million Zeilen und 200 Spalten zu lesen (Dateien reichen von 100 MB bis 1,6 GB). Ich kann dies (sehr langsam) für Dateien mit weniger als 300.000 Zeilen tun, aber sobald ich darüber hinausgehe, erhalte ich Speicherfehler. Mein Code sieht folgendermaßen aus:
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
Der Grund für die else-Klausel in der Funktion getstuff ist, dass alle Elemente, die dem Kriterium entsprechen, zusammen in der CSV-Datei aufgelistet werden. Daher verlasse ich die Schleife, wenn ich an ihnen vorbeikomme, um Zeit zu sparen.
Meine Fragen sind:
Wie kann ich es schaffen, dass dies mit den größeren Dateien funktioniert?
Kann ich es auf irgendeine Weise schneller machen?
Mein Computer verfügt über 8 GB RAM, 64-Bit-Windows 7, und der Prozessor ist 3,40 GHz (nicht sicher, welche Informationen Sie benötigen).