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 = trueGestion des erreurs et validation
Les fichiers CSV contiennent souvent des erreurs : guillemets superflus, non-concordance du nombre
Aussi dans la bibliothèque
Rate Limiting en PHP : Limitation du taux de requêtes pour protéger le site
CreateML Swift : guide complet avec exemples pratiques
Travailler avec Kafka en Kotlin : bibliothèques et exemples
Travailler avec Excel en TypeScript : bibliothèques, outils et exemples de code
Surveillance Node.js : outils et bibliothèques pour le suivi des performances