Heim >Backend-Entwicklung >Python-Tutorial >Wie gehe ich mit Speicherproblemen beim Lesen großer CSV-Dateien in Python um?
Lesen großer CSV-Dateien in Python
In Python 2.7 stoßen Benutzer häufig auf Speicherprobleme, wenn sie CSV-Dateien mit Millionen und Hunderten von Zeilen lesen Spalten. Dieser Artikel befasst sich mit diesen Herausforderungen und bietet Lösungen zur effektiven Verarbeitung großer CSV-Dateien.
Originalcode und Probleme
Der bereitgestellte Code zielt darauf ab, bestimmte Zeilen aus einer CSV-Datei zu lesen nach einem vorgegebenen Kriterium. Allerdings werden vor der Verarbeitung alle Zeilen in eine Liste geladen, was bei Dateien mit mehr als 300.000 Zeilen zu Speicherfehlern führt.
Lösung 1: Zeilen inkrementell verarbeiten
Um das zu beseitigen Bei Speicherproblemen ist es wichtig, Zeilen inkrementell zu verarbeiten, anstatt sie in einer Liste zu speichern. Um dies zu erreichen, kann eine Generatorfunktion verwendet 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
Diese Funktion liefert die Kopfzeile und die nachfolgenden Zeilen, die dem Kriterium entsprechen, und stoppt dann den Lesevorgang.
Lösung 2: Optimierte Filterung
Alternativ kann eine präzisere Filtermethode verwendet werden eingesetzt:
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))
Diese Methode verwendet die Funktionen takewhile und dropwhile aus dem itertools-Modul, um die Zeilen zu filtern.
Aktualisierter Code
Im getdata-Funktion wird das Listenverständnis durch einen Generator ersetzt Verständnis:
def getdata(filename, criteria): for criterion in criteria: for row in getstuff(filename, criterion): yield row
Fazit
Durch den Einsatz von Generatorfunktionen und der Optimierung von Filtertechniken ist es möglich, große CSV-Dateien effektiv zu verarbeiten, Speicherfehler zu vermeiden und die Leistung deutlich zu verbessern .
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Speicherproblemen beim Lesen großer CSV-Dateien in Python um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!