Lecture libre, sans compteChapitre 3 · Automatiser le traitement de tableurs

Lire et écrire des fichiers CSV

Introduction

Mise en situation

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 :

text
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

FormatLisible par un humainTaille du fichierSupporte le formatageUsage typique
CSV✅ Oui🟢 Très léger❌ NonÉchange de données simples
Excel (.xlsx)⚠️ Nécessite un logiciel🟡 Moyen✅ OuiRapports 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 !).

python
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']
python
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.DictReader est 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)

python
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() ou int() 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.

python
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 :

python
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

FonctionRôleType de retour par ligne
csv.reader(fichier)Lire un CSV simpleListe (list)
csv.DictReader(fichier)Lire un CSV avec noms de colonnesDictionnaire (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 utiliser with open(...) pour que le fichier se ferme automatiquement, même en cas d'erreur.

Mini-quiz

Mini-Quiz
Question 1 / 3

Que faut-il faire avant d'additionner des valeurs numériques lues depuis un fichier CSV ?

En bref

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.