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 :
# 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.
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.
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.
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.
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.
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.
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 modulecsvpour é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
DictReaderetDictWriterdè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