Problem:Lesen riesiger CSV-Dateien (bis zu 1 Million Zeilen, 200 Spalten) in Python 2.7 stößt auf Speicherfehler.
Der anfängliche Ansatz durchläuft die gesamte Datei und speichert Daten als Listen im Speicher. Bei großen Dateien wird diese Methode jedoch unpraktisch, da sie übermäßig viel Speicher verbraucht.
Lösung:
1. Verarbeiten Sie Zeilen, während sie erstellt werden:
Vermeiden Sie das Laden der gesamten Datei in den Speicher. Verarbeiten Sie stattdessen Zeilen, während sie mit einer Generatorfunktion generiert werden.
def getstuff(filename, criterion): with open(filename, "rb") as csvfile: datareader = csv.reader(csvfile) yield next(datareader) # yield the header row for row in datareader: if row[3] == criterion: yield row
2. Verwenden Sie Generatorfunktionen zum Filtern:
Filtern Sie Daten, während Sie die Datei mithilfe von Generatorfunktionen durchlaufen. Dieser Ansatz ermöglicht den Abgleich mehrerer aufeinanderfolgender Zeilen, die ein bestimmtes Kriterium erfüllen.
def getstuff(filename, criterion): with open(filename, "rb") as csvfile: datareader = csv.reader(csvfile) yield next(datareader) # yield the header row yield from takewhile( lambda r: r[3] == criterion, dropwhile(lambda r: r[3] != criterion, datareader)) return
3. Speicherverbrauch optimieren:
Refaktorisieren Sie getdata(), um auch eine Generatorfunktion zu verwenden und sicherzustellen, dass immer nur eine Zeile im Speicher gehalten wird.
def getdata(filename, criteria): for criterion in criteria: for row in getstuff(filename, criterion): yield row
Zusätzliche Tipps für Geschwindigkeit:
Das obige ist der detaillierte Inhalt vonWie kann man große CSV-Dateien in Python 2.7 effektiv verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!