Travailler avec CSV en Go (Golang) : guide complet pour l'analyse et l'écriture

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) : analyse, écriture et traitement de données

CSV (Comma-Separated Values) est l'un des formats les plus courants pour l'échange de données tabulaires. En Go (Golang), le travail avec CSV est implémenté nativement via le paquet standard encoding/csv, ce qui en fait un outil pratique et performant. Dans cet article, nous allons détailler comment lire, créer et traiter des fichiers CSV en Go, y compris le travail avec de grands volumes de données, la configuration des séparateurs et la gestion des erreurs.



Paquet encoding/csv : bases

Le paquet encoding/csv fournit deux types principaux : Reader pour la lecture CSV et Writer pour l'écriture. Il prend en charge les règles CSV standard (RFC 4180) et permet de configurer flexiblement des paramètres tels que le séparateur, les commentaires et le traitement des guillemets.

Pour commencer, il suffit d'importer le paquet :

import "encoding/csv"


Lecture d'un fichier CSV

Considérons un exemple simple de lecture ligne par ligne d'un fichier CSV :

package main

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

func main() { // Ouvrir le fichier file, err := os.Open("data.csv") if err != nil { panic(err) } defer file.Close()

// Créer un Reader reader := csv.NewReader(file)

// Lire tous les enregistrements records, err := reader.ReadAll() if err != nil { panic(err) }

// Afficher les données for i, record := range records { fmt.Printf("Ligne %d : %v", i, record) }}

Important : ReadAll() charge tout le fichier en mémoire. Pour les gros fichiers, utilisez la lecture ligne par ligne avec Read().



Lecture ligne par ligne des gros fichiers CSV

Pour traiter de grands volumes de données (gigaoctets), utilisez la lecture itérative :

reader := csv.NewReader(file)for {    record, err := reader.Read()    if err != nil {        // Fin du fichier        if err.Error() == "EOF" {            break        }        panic(err)    }    // Traiter l'enregistrement    fmt.Println(record)}


Écriture dans un fichier CSV

La création d'un fichier CSV est également intuitive :

package main

import ( "encoding/csv" "os")

func main() { file, err := os.Create("output.csv") if err != nil { panic(err) } defer file.Close()

writer := csv.NewWriter(file) defer writer.Flush() // Important : vider le tampon

// Écrire les en-têtes writer.Write([]string{"Nom", "Âge", "Ville"}) // Écrire les données writer.Write([]string{"Alice", "30", "Moscou"}) writer.Write([]string{"Bob", "25", "Saint-Pétersbourg"})}

N'oubliez pas d'appeler Flush() après toutes les opérations d'écriture, sinon les données peuvent être perdues.



Configuration du séparateur et autres paramètres

Par défaut, la virgule est utilisée, mais vous pouvez changer le séparateur, par exemple, pour le point-virgule (TSV — tabulation) :

reader := csv.NewReader(file)reader.Comma = ';'  // Pour TSV : '\\t'

// Pour l'écriture :writer := csv.NewWriter(file)writer.Comma = ';'

Autres paramètres utiles :

  • LazyQuotes — autorise les guillemets dans des endroits non standard (par défaut false)
  • FieldsPerRecord — vérification du nombre de champs (une valeur négative désactive la vérification)
  • Comment — caractère de commentaire (par exemple, '#'), les lignes commençant par celui-ci sont ignorées
  • TrimLeadingSpace — suppression automatique des espaces en début de champ

Exemple avec configuration :

reader := csv.NewReader(file)reader.Comma = '\\t'reader.Comment = '#'reader.TrimLeadingSpace = true


Gestion des erreurs et validation

Les fichiers CSV contiennent souvent des erreurs : guillemets superflus, non-concordance du nombre

Recommendations