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 DatensatzLazyQuotes— Nicht maskierte Anführungszeichen erlaubenTrimLeadingSpace— 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 Auch in der Bibliothek
Reaktive Programmierung in C# (.NET) — Observable, Rx.NET und LINQ
Swagger/OpenAPI Generierung für Swift: Werkzeuge und Bibliotheken
SMS-Versand mit Rust: RustSMS – API-Bibliothek für die Arbeit mit SMS-Gateways
Maschinelles Lernen mit Go: Bibliotheken für Golang (ML, neuronale Netze, NLP)