Lire et écrire des fichiers CSV
Introduction
Vous travaillez comme assistant administratif chez Boulangerie Dupain. Chaque soir, la caisse enregistreuse exporte les ventes du jour dans un fichier ventes.csv. Votre responsable en a assez d'ouvrir Excel manuellement chaque matin pour calculer le total des ventes.
Votre défi
Automatiser la lecture du fichier CSV pour calculer automatiquement le chiffre d'affaires du jour et générer un rapport propre, sans ouvrir Excel.
Les fichiers CSV (Comma-Separated Values, ou « valeurs séparées par des virgules ») sont partout : exports de banques, listes de clients, résultats de formulaires, données scientifiques... C'est le format le plus universel pour stocker des tableaux de données sous forme de simple texte.
Dans cette leçon, vous allez apprendre à lire un CSV existant et à écrire vos propres fichiers CSV avec Python, grâce au module csv de la bibliothèque standard.
Qu'est-ce qu'un fichier CSV ?
Un fichier CSV est un simple fichier texte où :
- chaque ligne représente une ligne du tableau,
- chaque valeur est séparée par un caractère (souvent une virgule
,ou un point-virgule;).
Voici à quoi ressemble le fichier ventes.csv de notre boulangerie :
1nom_produit,prix_unitaire,quantite
2Baguette,1.10,150
3Croissant,1.30,80
4Pain complet,2.50,45💡 À retenir : Un CSV n'a pas de mise en forme (pas de couleurs, pas de fusion de cellules). C'est juste du texte brut organisé en lignes et colonnes — ce qui le rend très facile à traiter par un programme.
CSV vs autres formats
| Format | Lisible par un humain | Taille du fichier | Supporte le formatage | Usage typique |
|---|---|---|---|---|
| CSV | ✅ Oui | 🟢 Très léger | ❌ Non | Échange de données simples |
| Excel (.xlsx) | ⚠️ Nécessite un logiciel | 🟡 Moyen | ✅ Oui | Rapports mis en forme |
| JSON | ✅ Oui | 🟡 Moyen | ⚠️ Partiel (structure) | Données imbriquées, API |
Le processus global
Lire un fichier CSV
Le module csv propose deux façons principales de lire un fichier : csv.reader (lignes = listes) et csv.DictReader (lignes = dictionnaires, plus pratique !).
1import csv
2
3# Méthode 1 : csv.reader (chaque ligne est une liste)
4with open("ventes.csv", encoding="utf-8") as fichier:
5 lecteur = csv.reader(fichier)
6 en_tete = next(lecteur) # on saute la première ligne (les noms de colonnes)
7 for ligne in lecteur:
8 print(ligne) # ex: ['Baguette', '1.10', '150']1import csv
2
3# Méthode 2 : csv.DictReader (chaque ligne est un dictionnaire)
4with open("ventes.csv", encoding="utf-8") as fichier:
5 lecteur = csv.DictReader(fichier)
6 for ligne in lecteur:
7 print(ligne["nom_produit"], ligne["prix_unitaire"], ligne["quantite"])🎯 En pratique :
csv.DictReaderest presque toujours préférable pour les débutants : on accède aux valeurs par leur nom de colonne (ligne["prix_unitaire"]) plutôt que par leur position (ligne[1]), ce qui rend le code plus lisible et moins fragile si l'ordre des colonnes change.
Calculer le chiffre d'affaires (notre scénario)
1import csv
2
3total_ventes = 0
4
5with open("ventes.csv", encoding="utf-8") as fichier:
6 lecteur = csv.DictReader(fichier)
7 for ligne in lecteur:
8 prix = float(ligne["prix_unitaire"])
9 quantite = int(ligne["quantite"])
10 total_ventes += prix * quantite
11
12print(f"Chiffre d'affaires du jour : {total_ventes:.2f} €")⚠️ Attention : Toutes les valeurs lues dans un CSV sont des chaînes de caractères (str), même les nombres ! Il faut impérativement les convertir avec
float()ouint()avant de faire des calculs, sinon Python concatènera du texte au lieu d'additionner des nombres.
Écrire un fichier CSV
Pour créer un rapport automatique, on utilise csv.writer ou csv.DictWriter.
1import csv
2
3produits = [
4 {"nom_produit": "Baguette", "prix_unitaire": 1.10, "quantite": 150},
5 {"nom_produit": "Croissant", "prix_unitaire": 1.30, "quantite": 80},
6]
7
8with open("rapport.csv", "w", newline="", encoding="utf-8") as fichier:
9 colonnes = ["nom_produit", "prix_unitaire", "quantite"]
10 ecrivain = csv.DictWriter(fichier, fieldnames=colonnes)
11 ecrivain.writeheader() # écrit la ligne d'en-tête
12 ecrivain.writerows(produits) # écrit toutes les lignes d'un coup⚠️ Attention : Sur Windows, oublier
newline=""lors de l'ouverture en écriture peut faire apparaître des lignes vides supplémentaires entre chaque ligne du CSV. C'est un piège classique !
Testez la lecture d'un CSV
Simulateur : additionner une colonne CSV
Collez des lignes au format produit,prix,quantite (une par ligne) et calculez le total.
Gérer les séparateurs différents
Certains fichiers (notamment issus d'Excel en français) utilisent le point-virgule ; au lieu de la virgule. Le module csv permet de le préciser :
1import csv
2
3with open("export_excel.csv", encoding="utf-8") as fichier:
4 lecteur = csv.reader(fichier, delimiter=";")
5 for ligne in lecteur:
6 print(ligne)Le saviez-vous ?
Le format CSV n'a jamais eu de norme officielle avant 2005 ! Chaque logiciel l'interprétait un peu différemment (virgule, point-virgule, guillemets...), ce qui causait de nombreux bugs. La RFC 4180 a enfin standardisé le format, mais aujourd'hui encore, Excel en français exporte par défaut avec des points-virgules à cause de la virgule utilisée comme séparateur décimal.
— RFC 4180, IETF (2005)
Récapitulatif visuel des fonctions clés
| Fonction | Rôle | Type de retour par ligne |
|---|---|---|
csv.reader(fichier) | Lire un CSV simple | Liste (list) |
csv.DictReader(fichier) | Lire un CSV avec noms de colonnes | Dictionnaire (dict) |
csv.writer(fichier) | Écrire un CSV simple | — |
csv.DictWriter(fichier, fieldnames=...) | Écrire un CSV avec en-têtes | — |
💡 À retenir : Toujours ouvrir les fichiers avec
open(..., encoding="utf-8")pour éviter les problèmes d'accents, et utiliserwith open(...)pour que le fichier se ferme automatiquement, même en cas d'erreur.
Mini-quiz
Que faut-il faire avant d'additionner des valeurs numériques lues depuis un fichier CSV ?
En bref
- 1Un fichier CSV stocke un tableau de données en texte brut, avec des valeurs séparées par une virgule (ou un point-virgule).
- 2Le module csv (csv.reader, csv.DictReader, csv.writer, csv.DictWriter) permet de lire et écrire facilement ces fichiers en Python, DictReader/DictWriter étant recommandés pour leur lisibilité.
- 3Les valeurs lues sont toujours des chaînes de caractères : pensez à les convertir avec float() ou int() avant tout calcul, et utilisez newline='' à l'écriture.