Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verarbeite ich große CSV-Dateien effizient in Go?

Wie verarbeite ich große CSV-Dateien effizient in Go?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 04:49:30519Durchsuche

How to Efficiently Process Large CSV Files in Go?

Effizientes Lesen und Schreiben von CSV-Daten in Go

Der bereitgestellte Go-Code liest eine große CSV-Datei mit 10.000 Datensätzen, führt Berechnungen durch und schreibt dann die ursprünglichen Werte in eine andere CSV-Datei mit einer zusätzlichen Bewertungsspalte. Der Vorgang ist jedoch langsam und dauert Stunden. In diesem Artikel werden mögliche Ineffizienzen bei den CSV-Lese- und Schreibvorgängen untersucht, um den Code zu optimieren.

Eine wichtige Optimierung besteht darin, zu vermeiden, dass die gesamte Datei auf einmal in den Speicher geladen wird. Der ursprüngliche Code verwendet ReadAll(), um alle Datensätze in einen Slice einzulesen, was für große Dateien nicht effizient ist. Stattdessen wird ein Streaming-Ansatz bevorzugt, bei dem die Datei zeilenweise verarbeitet wird.

Um dies umzusetzen, können wir eine Goroutine verwenden, um die CSV-Datei Zeile für Zeile zu lesen und die Datensätze an einen Kanal zu senden. Die Haupt-Goroutine kann die Datensätze aus dem Kanal nutzen, Berechnungen durchführen und die Ergebnisse in die Ausgabe-CSV schreiben. Hier ist eine Beispielimplementierung:

<code class="go">func processCSV(rc io.Reader) (ch chan []string) {
    ch = make(chan []string, 10)
    go func() {
        r := csv.NewReader(rc)
        if _, err := r.Read(); err != nil { //read header
            log.Fatal(err)
        }
        defer close(ch)
        for {
            rec, err := r.Read()
            if err != nil {
                if err == io.EOF {
                    break
                }
                log.Fatal(err)

            }
            ch <- rec
        }
    }()
    return
}</code>

In diesem Code nimmt die Funktion „processCSV()“ einen Reader und gibt einen Kanal zurück, der die Datensätze aus der CSV-Datei ausgibt. Die Haupt-Goroutine kann diesen Kanal dann nutzen, um die Datensätze effizient zu verarbeiten und zu schreiben.

Durch die Verwendung dieses Streaming-Ansatzes können wir die Leistung der CSV-Lese- und Schreibvorgänge erheblich verbessern, wodurch der Code für die Verarbeitung großer Mengen effizienter wird CSV-Dateien.

Das obige ist der detaillierte Inhalt vonWie verarbeite ich große CSV-Dateien effizient in Go?. 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