Travailler avec CSV en Go (Golang) : guide complet sur encoding/csv

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec CSV en Go (Golang) : guide complet



CSV (Comma-Separated Values) est l'un des formats les plus courants pour l'échange de données tabulaires. En langage Go (Golang), le travail avec CSV est organisé via le package standard encoding/csv. Il fournit une interface pratique et performante pour la lecture et l'écriture de fichiers CSV, prend en charge la configuration des séparateurs, l'échappement des caractères et la gestion des erreurs.



Dans cet article, nous allons détailler toutes les fonctionnalités du package encoding/csv à l'aide d'exemples pratiques. Vous apprendrez à lire des fichiers CSV ligne par ligne et en entier, à écrire des données, à configurer les paramètres d'analyse et à gérer les erreurs typiques.



Installation et importation



Le package encoding/csv fait partie de la bibliothèque standard de Go, donc aucune installation supplémentaire n'est nécessaire. Pour l'utiliser, il suffit de l'importer dans votre code :



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


Lecture de fichiers CSV



La façon la plus simple de lire un CSV est d'utiliser csv.NewReader et la méthode ReadAll, qui retourne tous les enregistrements sous forme d'une tranche de tranches de chaînes.



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) }}


Pour les fichiers volumineux, il est préférable d'utiliser une lecture ligne par ligne avec la méthode Read, afin d'éviter de charger tout le fichier en mémoire :



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

reader := csv.NewReader(file) reader.LazyQuotes = true // permet un parsing non strict des guillemets

for { record, err := reader.Read() if err != nil { break // fin du fichier ou erreur } fmt.Println(record) }}


Écriture de fichiers CSV



Pour écrire des données, on utilise csv.NewWriter. La méthode Write écrit un enregistrement, tandis que WriteAll les écrit tous en une fois. N'oubliez pas d'appeler Flush() pour vider le tampon.



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{ {"Nom", "Âge", "Ville"}, {"Anna", "28", "Moscou"}, {"Ivan", "35", "Saint-Pétersbourg"}, }

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


Configuration du séparateur et de l'échappement



Par défaut, encoding/csv utilise la virgule comme séparateur et les guillemets doubles pour l'échappement. Vous pouvez modifier ces paramètres via les champs des structures Reader et Writer :



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

reader := csv.NewReader(file) reader.Comma = '\\t' // tabulation au lieu de la virgule reader.Comment = '#' // ignorer les lignes commençant par #

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


Champs utiles pour la configuration :

  • Comma — caractère séparateur (par défaut ',')
  • Comment — caractère de commentaire (les lignes commençant par ce caractère sont ignorées)
  • LazyQuotes — permet un parsing non strict des guillemets
  • TrimLeadingSpace — supprime les espaces en début de champs
  • FieldsPerRecord — nombre attendu

Recommendations