logo oujood
🔍

Lire et écrire des fichiers CSV en Python

Le format CSV est omniprésent : exports Excel, bases de données, APIs. Python intègre un module csv qui le gère proprement sans bibliothèque externe.

OUJOOD.COM

Le format CSV (Comma-Separated Values) est un fichier texte où chaque ligne représente un enregistrement et chaque valeur est séparée par une virgule — ou un point-virgule selon les régions. C'est le format d'échange le plus répandu : exports depuis Excel, données téléchargées depuis une API, résultats d'un formulaire en ligne.

Python inclut un module csv dans sa bibliothèque standard. Pas besoin d'installer quoi que ce soit. Ce cours vous montre comment lire un CSV ligne par ligne, comment en écrire un, et comment travailler avec les en-têtes de colonnes grâce à DictReader et DictWriter.

Structure d'un fichier CSV

Un CSV ressemble à ceci — la première ligne contient souvent les noms de colonnes :

  📋 Copier le code

# Contenu du fichier eleves.csv
nom,prenom,note
Dupont,Alice,17
Martin,Bob,12
Bernard,Claire,15

Lire un fichier CSV avec csv.reader

csv.reader lit le fichier ligne par ligne et retourne chaque ligne sous forme de liste. La première ligne contient généralement les en-têtes — pensez à la sauter avec next() si vous ne voulez pas la traiter comme une donnée.

  📋 Copier le code

import csv

with open("eleves.csv", newline="", encoding="utf-8") as fichier:
    lecteur = csv.reader(fichier)
    entetes = next(lecteur)  # Lire et ignorer la ligne d'en-têtes
    print("Colonnes :", entetes)

    for ligne in lecteur:
        nom, prenom, note = ligne
        print(f"{prenom} {nom} : {note}/20")

# Résultat :
# Colonnes : ['nom', 'prenom', 'note']
# Alice Dupont : 17/20
# Bob Martin : 12/20
# Claire Bernard : 15/20

Le paramètre newline="" est recommandé par la documentation Python pour éviter des problèmes de saut de ligne sur Windows. encoding="utf-8" garantit la lecture correcte des caractères accentués.

Lire un CSV avec csv.DictReader

DictReader est souvent plus pratique que reader : il utilise la première ligne comme noms de colonnes et retourne chaque ligne sous forme de dictionnaire. Vous accédez aux valeurs par nom de colonne plutôt que par index, ce qui rend le code plus lisible et moins fragile.

  📋 Copier le code

import csv

with open("eleves.csv", newline="", encoding="utf-8") as fichier:
    lecteur = csv.DictReader(fichier)

    for ligne in lecteur:
        print(f"{ligne['prenom']} {ligne['nom']} : {ligne['note']}/20")

# Résultat :
# Alice Dupont : 17/20
# Bob Martin : 12/20
# Claire Bernard : 15/20

Avantage concret : si quelqu'un réorganise les colonnes du fichier CSV, votre code continue de fonctionner — vous accédez toujours à ligne['note'], peu importe la position de la colonne.

Écrire un fichier CSV avec csv.writer

csv.writer écrit des listes dans un fichier CSV. Ouvrez le fichier en mode écriture ("w") avec newline="" pour éviter les lignes vides sur Windows.

  📋 Copier le code

import csv

eleves = [
    ["Dupont", "Alice", 17],
    ["Martin", "Bob", 12],
    ["Bernard", "Claire", 15],
]

with open("resultats.csv", "w", newline="", encoding="utf-8") as fichier:
    writer = csv.writer(fichier)

    # Écrire l'en-tête
    writer.writerow(["nom", "prenom", "note"])

    # Écrire toutes les lignes d'un coup
    writer.writerows(eleves)

print("Fichier resultats.csv créé.")

Écrire un CSV avec csv.DictWriter

DictWriter écrit des dictionnaires dans un CSV. Vous définissez l'ordre des colonnes avec fieldnames, et chaque ligne est un dictionnaire. Pratique quand vos données proviennent d'une liste de dictionnaires — ce qui arrive souvent avec des APIs ou des bases de données.

  📋 Copier le code

import csv

eleves = [
    {"nom": "Dupont", "prenom": "Alice", "note": 17},
    {"nom": "Martin", "prenom": "Bob", "note": 12},
    {"nom": "Bernard", "prenom": "Claire", "note": 15},
]

colonnes = ["nom", "prenom", "note"]

with open("resultats.csv", "w", newline="", encoding="utf-8") as fichier:
    writer = csv.DictWriter(fichier, fieldnames=colonnes)

    writer.writeheader()   # Écrit automatiquement la ligne d'en-tête
    writer.writerows(eleves)

print("Fichier resultats.csv créé.")

Gérer les séparateurs différents

En France et dans plusieurs pays européens, Excel utilise le point-virgule comme séparateur (car la virgule sert de séparateur décimal). Si vous recevez un tel fichier, précisez le délimiteur avec le paramètre delimiter.

  📋 Copier le code

import csv

# Lire un CSV séparé par des points-virgules
with open("donnees.csv", newline="", encoding="utf-8") as fichier:
    lecteur = csv.reader(fichier, delimiter=";")
    for ligne in lecteur:
        print(ligne)

# Écrire un CSV séparé par des tabulations
with open("export.tsv", "w", newline="", encoding="utf-8") as fichier:
    writer = csv.writer(fichier, delimiter="\t")
    writer.writerow(["ville", "population"])
    writer.writerow(["Paris", 2161000])

Exemple complet : filtrer et réécrire un CSV

Cas pratique : lire un CSV d'élèves, garder uniquement ceux qui ont une note supérieure à 14, et écrire le résultat dans un nouveau fichier.

  📋 Copier le code

import csv

mentions = []

# Étape 1 : lire et filtrer
with open("eleves.csv", newline="", encoding="utf-8") as f_entree:
    lecteur = csv.DictReader(f_entree)
    for ligne in lecteur:
        if int(ligne["note"]) > 14:
            mentions.append(ligne)

# Étape 2 : écrire le résultat filtré
with open("mentions.csv", "w", newline="", encoding="utf-8") as f_sortie:
    colonnes = ["nom", "prenom", "note"]
    writer = csv.DictWriter(f_sortie, fieldnames=colonnes)
    writer.writeheader()
    writer.writerows(mentions)

print(f"{len(mentions)} élève(s) avec mention.")
# Résultat : 2 élève(s) avec mention. (Alice : 17, Claire : 15)

Bonnes pratiques

  • Toujours utiliser with open(...) — le fichier est fermé automatiquement, même en cas d'erreur.
  • Toujours préciser newline="" à l'ouverture — c'est la recommandation officielle du module csv pour éviter des lignes vides parasites.
  • Toujours préciser encoding="utf-8" — sans ça, les caractères accentués peuvent poser problème selon le système d'exploitation.
  • Préférer DictReader et DictWriter dès que le CSV a des en-têtes — le code est plus lisible et résiste mieux aux changements de structure.

Par carabde | Mis à jour le 21 avril 2026