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ührungszeichenTrimLeadingSpace— entfernt führende Leerzeichen in FeldernFieldsPerRecord— erwartete Anzahl
Auch in der Bibliothek
clinic.js — Überwachung von TypeScript-Anwendungen
JSON-Verarbeitung in Java: Bibliotheken und Werkzeuge für die Arbeit mit JSON
reflect-metadata für TypeScript: Komplettguide mit Beispielen