Arbeiten mit CSV in Go (Golang): vollständige Anleitung zu 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

Arbeiten mit CSV in Go (Golang): vollständige Anleitung



CSV (Comma-Separated Values) ist eines der am weitesten verbreiteten Formate für den Austausch tabellarischer Daten. In der Sprache Go (Golang) wird die Arbeit mit CSV über das Standardpaket encoding/csv organisiert. Es bietet eine bequeme und leistungsstarke Schnittstelle zum Lesen und Schreiben von CSV-Dateien, unterstützt die Konfiguration von Trennzeichen, das Escapen von Zeichen und die Fehlerbehandlung.



In diesem Artikel werden wir alle Funktionen des Pakets encoding/csv anhand praktischer Beispiele im Detail durchgehen. Sie erfahren, wie Sie CSV-Dateien zeilenweise und vollständig lesen, Daten schreiben, Parsing-Parameter konfigurieren und typische Fehler behandeln.



Installation und Import



Das Paket encoding/csv ist Teil der Go-Standardbibliothek, daher ist keine zusätzliche Installation erforderlich. Für die Verwendung reicht es aus, es in Ihren Code zu importieren:



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


CSV-Dateien lesen



Der einfachste Weg, eine CSV-Datei zu lesen, ist die Verwendung von csv.NewReader und der Methode ReadAll, die alle Datensätze als Slice von String-Slices zurückgibt.



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

reader := csv.NewReader(file) records, err := reader.ReadAll() if err != nil { panic(err) }

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


Für große Dateien ist es besser, das zeilenweise Lesen mit der Methode Read zu verwenden, um das Laden der gesamten Datei in den Speicher zu vermeiden:



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

reader := csv.NewReader(file) reader.LazyQuotes = true // erlaubt lockeres Parsen von Anführungszeichen

for { record, err := reader.Read() if err != nil { break // Dateiende oder Fehler } fmt.Println(record) }}


CSV-Dateien schreiben



Zum Schreiben von Daten wird csv.NewWriter verwendet. Die Methode Write schreibt einen einzelnen Datensatz, WriteAll schreibt alle auf einmal. Vergessen Sie nicht, Flush() aufzurufen, um den Puffer zu leeren.



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

writer := csv.NewWriter(file) defer writer.Flush()

data := [][]string{ {"Name", "Alter", "Stadt"}, {"Anna", "28", "Moskau"}, {"Ivan", "35", "Sankt Petersburg"}, }

for _, record := range data { if err := writer.Write(record); err != nil { panic(err) } }}


Konfiguration von Trennzeichen und Escape-Zeichen



Standardmäßig verwendet encoding/csv ein Komma als Trennzeichen und doppelte Anführungszeichen zum Escapen. Sie können diese Einstellungen über die Felder der Strukturen Reader und Writer ändern:



func customSettings() {    // TSV (Tab-Separated Values) lesen    file, _ := os.Open("data.tsv")    defer file.Close()

reader := csv.NewReader(file) reader.Comma = '\\t' // Tabulator statt Komma reader.Comment = '#' // Zeilen ignorieren, die mit # beginnen

records, _ := reader.ReadAll() fmt.Println(records)}


Nützliche Felder zur Konfiguration:

  • Comma — Trennzeichen (Standard: ',')
  • Comment — Kommentarzeichen (Zeilen, die mit diesem Zeichen beginnen, werden ignoriert)
  • LazyQuotes — erlaubt lockeres Parsen von Anführungszeichen
  • TrimLeadingSpace — entfernt führende Leerzeichen in Feldern
  • FieldsPerRecord — erwartete Anzahl

Empfehlungen