Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann man große CSV-Dateien in Python 2.7 effektiv verarbeiten?

Wie kann man große CSV-Dateien in Python 2.7 effektiv verarbeiten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-08 03:32:02628Durchsuche

How to Effectively Handle Large CSV Files in Python 2.7?

Lesen großer CSV-Dateien in Python

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:

  • Verwenden Sie csv.reader mit einem Blockgrößenparameter:Lesen Sie Dateien in kleineren Blöcken, um den Speicherbedarf zu reduzieren.
  • Erwägen Sie die Verwendung einer Datenbank-Engine:Wenn die Daten passen, speichern Sie sie in einer Datenbank für eine schnellere und effizientere Verarbeitung.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn