Arbeiten mit CSV in Go (Golang): Vollständige Anleitung zum Paket encoding/csv

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Das Paket encoding/csv in Go: Vollständige Anleitung zur Arbeit mit CSV-Dateien



Das CSV-Format (Comma-Separated Values) bleibt eines der beliebtesten Formate für den Austausch von Tabellendaten. In Go (Golang) gibt es für die Arbeit mit diesem Format das Standardpaket encoding/csv, das eine bequeme und leistungsstarke Schnittstelle zum Lesen und Schreiben von CSV-Dateien bietet. In diesem Artikel werden wir alle Funktionen des Pakets im Detail besprechen, von grundlegenden Operationen bis hin zu fortgeschrittenen Techniken.



Hauptfunktionen des Pakets encoding/csv

Das Paket encoding/csv ist Teil der Go-Standardbibliothek und erfordert keine Installation zusätzlicher Abhängigkeiten. Es unterstützt:

  • Lesen von CSV-Dateien mit anpassbaren Trennzeichen
  • Schreiben von Daten im CSV-Format
  • Verarbeitung von Anführungszeichen und Maskierung von Sonderzeichen
  • Arbeit mit Spaltenüberschriften
  • Lazy Reading (Streaming-Verarbeitung großer Dateien)


Lesen von CSV-Dateien in Go

Zum Lesen einer CSV-Datei wird die Struktur csv.Reader verwendet. Betrachten wir ein einfaches Beispiel:



package main

import ( "encoding/csv" "fmt" "log" "os")

func main() { // CSV-Datei öffnen file, err := os.Open("data.csv") if err != nil { log.Fatal("Fehler beim Öffnen der Datei:", err) } defer file.Close()

// Neuen CSV-Reader erstellen reader := csv.NewReader(file)

// Alle Datensätze auf einmal lesen records, err := reader.ReadAll() if err != nil { log.Fatal("Fehler beim Lesen der CSV:", err) }

// Daten ausgeben for i, record := range records { fmt.Printf("Zeile %d: %v", i+1, record) }}


Streaming-Lesen großer Dateien

Für die Verarbeitung großer CSV-Dateien (mehrere hundert Megabyte und mehr) wird das zeilenweise Lesen empfohlen:



func readLargeCSV(filename string) error {    file, err := os.Open(filename)    if err != nil {        return err    }    defer file.Close()

reader := csv.NewReader(file) // Kopfzeile überspringen header, err := reader.Read() if err != nil { return err } fmt.Println("Kopfzeilen:", header)

// Zeilenweise lesen lineCount := 0 for { record, err := reader.Read() if err != nil { break // Dateiende } // Datensatz verarbeiten fmt.Printf("Zeile %d: %s | %s", lineCount+1, record[0], record[1]) lineCount++ } return nil}


Konfiguration des CSV-Parsers

Das Paket encoding/csv ermöglicht eine flexible Anpassung der Leseparameter:

  • Comma — Trennzeichen (standardmäßig Komma)
  • Comment — Kommentarzeichen (Zeilen, die damit beginnen, werden ignoriert)
  • FieldsPerRecord — Erwartete Anzahl von Feldern pro Datensatz
  • LazyQuotes — Nicht maskierte Anführungszeichen erlauben
  • TrimLeadingSpace — Leerzeichen am Anfang von Feldern entfernen


func customCSVParser() {    file, _ := os.Open("custom.csv")    defer file.Close()

reader := csv.NewReader(file) reader.Comma = ';' // Semikolon verwenden reader.Comment = '#' // Zeilen mit # werden ignoriert reader.TrimLeadingSpace = true reader.LazyQuotes = true

records, _ := reader.ReadAll() for _, record := range records { fmt.Println(record) }}


Schreiben von Daten im CSV-Format

Zum Schreiben wird die Struktur csv.Writer verwendet. Beispiel zum Erstellen einer CSV-Datei:



func writeCSV(filename string) error {    file, err := os.Create(filename)    if err != nil {        return err    }    defer file.Close()

writer := csv.NewWriter(file) defer writer.Flush() // Wichtig! Puffer in die Datei leeren

// Kopfzeile schreiben

Empfehlungen