
I. Présentation
Dans ce tutoriel, nous allons apprendre à lire, écrire et manipuler un fichier CSV via le langage Python. Nous utiliserons pour cela le module Python csv.
Le format CSV (pour Comma Separated Values) est un format de fichier texte très simple qui organise les données sous forme de lignes, chaque ligne correspondant à un enregistrement. Les champs d’un enregistrement sont séparés par un délimiteur (souvent un point-virgule ou une virgule).
En général, la première ligne d’un fichier CSV contient les noms des colonnes. Voici par exemple à quoi peut ressembler un fichier CSV :
Prénom,Age,Profession
Alice,30,Ingénieure
Bob,25,Designer
Charlie,35,Enseignant
David,40,Avocat
Emma,28,Graphiste
Frank,50,Médecin
Gina,22,Étudiante
Hugo,45,Chef
Isabelle,33,Comptable
Ce format de fichier est encore aujourd’hui très utilisé, car il est très simple à créer, lire et manipuler. De plus, il est facilement pris en charge par de nombreux langages de programmation et outils bureautiques (Google Sheets, Excel, LibreOffice Calc, etc.). Il est donc un excellent pont entre le monde de la programmation et celui de la bureautique pour l’import et l’export de données.
Si vous débutez complètement en Python, je vous oriente vers notre tutoriel débutant :
II. Le module csv de Python
Pour rappel, un module (aussi appelé bibliothèque ou, plus maladroitement, librairie) en Python est un ensemble de fonctions prêtes à l’emploi, regroupées autour d’une thématique précise. L’utilisation de ces modules permet de gagner du temps, d’éviter de réinventer la roue et de rendre le code plus fiable et plus facile à maintenir.
Dans ce tutoriel, nous allons surtout utiliser le module csv, inclus dans la bibliothèque standard de Python. Il offre tout le nécessaire pour lire, écrire et manipuler des fichiers CSV de façon efficace et rapide.
En Python, la bibliothèque standard est installée en même temps que l’interpréteur. À l’inverse, les bibliothèques communautaires, créées et maintenues par la communauté, doivent être installées séparément (par exemple, depuis PyPI) à l’aide de l’outil pip.
La documentation de ce module peut être retrouvée ici :
Néanmoins, elle peut être assez rude à lire lorsque l’on débute, c’est pourquoi nous travaillerons ici progressivement et à l’aide d’exemples.
III. Traiter simplement du CSV en Python
A. Ouvrir et lire un fichier CSV avec Python
Commençons par le plus simple, récupérer et lire le contenu d’un fichier CSV existant. Pour cela, nous allons travailler avec le contenu présenté en introduction, qui contient donc trois colonnes : Prénom, Age, Profession.
Il vous suffit de copier-coller son contenu dans un fichier qui devra avoir l’extension .csv. Dans notre exemple, il s’agira du fichier personnes.csv.
Dans un premier temps, je vous suggère de travailler depuis un interpréteur interactif Python plutôt que via un script que vous devrez modifier, enregistrer puis exécuter. Cela permet de faire des erreurs, expérimenter et apprendre beaucoup plus rapidement.
Commençons par importer ce fameux module csv :
import csv
Une fois cela fait, nous allons ouvrir notre fichier CSV et afficher son contenu ligne par ligne :
with open(“personnes.csv”, “r”) as csv_file:
csv_content = csv.reader(csv_file)
for line in csv_content:
print(line)
Le module csv contient la fonction reader(), qui renvoie un objet de type csv.reader. Cet objet permet de parcourir le contenu du fichier CSV ligne par ligne. À l’aide de la boucle for, nous itérons donc sur chaque ligne du fichier et l’affichons avec la fonction print().
Voici le retour attendu :
Affichage du contenu d’un fichier CSV en Python.
Nous avons en retour l’affichage de plusieurs listes (encadrées par des crochets “[ ]”). Plus précisément, une liste par ligne du fichier CSV. Cela est plutôt pratique puisque l’on peut localiser facilement une “case” de notre CSV. Par exemple, isolons uniquement les professions en adaptant un peu notre code :
with open(“personnes.csv”, “r”) as csv_file:
csv_content = csv.reader(csv_file)
for line in csv_content:
# Afficher uniquement la colonne 2 (profession)
print(line[2])
Pour rappel : l’indexation des listes en Python commence par 0, la colonne Profession est donc bien la n°2 et non la n°3. Voici le résultat de notre code modifié :
Affichage de la colonne 2 d’un fichier CSV en Python.
Pour un contexte plus réaliste de présentation des données, nous pouvons les formater de manière plus lisible. Par exemple :
with open(“personnes.csv”, “r”) as csv_file:
csv_content = csv.reader(csv_file)
for line in csv_content:
# On passe la première ligne
if “Age” in line:
continue
else:
print(f”{line[0]} a {line[1]} ans et est {line[2]}!”)
Voici le résultat de cet exemple de code :
Formatage des données du fichier CSV en Python via csv.reader.
Dans ce code, la condition if “Age” in line: sert à identifier et à ignorer la ligne d’en‑tête, qui contient le mot Age. Ainsi, on évite un affichage incorrect du type “Prénom a Age ans et est Profession !”. L’instruction continue fait simplement passer à l’itération suivante de la boucle, sans exécuter le reste du bloc.
Bref, vous avez compris le principe, le fait de lire ligne par ligne le contenu de notre fichier CSV permet de réaliser des opérations précises par ligne et aussi sur les colonnes souhaitées grâce à l’utilisation des listes.
Mon délimiteur CSV n’est pas une virgule
Un petit problème que vous risquez de rencontrer tôt ou tard concerne la lecture de fichiers CSV dont le délimiteur n’est pas une virgule. Heureusement pour nous, la fonction csv.reader accepte l’argument delimiter, qui permet d’indiquer quel est le caractère délimiteur dans le fichier CSV à traiter. Il faut alors modifier légèrement la façon dont nous faisons appel à csv.reader en y ajoutant le paramètre suivant (exemple avec un CSV dont le délimiteur est un underscore “_”) :
csv_content = csv.reader(csv_file, delimiter = “_”)
Comme vous pouvez le voir, aucun problème ! Le nouveau délimiteur est bien pris en compte :
Lecture d’un fichier CSV avec un délimiteur personnalisé.
B. Créer et remplir un fichier CSV en Python
Après avoir vu comment lire un fichier CSV, voyons à présent comment créer un tel fichier et y insérer nos propres données. Imaginons que nous disposions d’informations récupérées depuis une base de données ou une API et que nous souhaitions les sauvegarder dans un fichier CSV.
Pour cela, nous allons utiliser cette fois la fonction csv.writer() et écrire ligne par ligne notre fichier à l’aide de la méthode writerow(ligne). Voici un exemple :
import csv
# Ensemble de données à enregistrer
data = [
[“Prénom”, “Age”, “Profession”],
[“Alice”, “30”, “Ingénieure”],
[“Bob”, “25”, “Designer”],
[“Charlie”, “35”, “Enseignant”]
]
# Création du fichier CSV en mode écriture
with open(“new_list.csv”, “w”, newline=””, encoding=”utf-8″) as csv_file:
csv_writer = csv.writer(csv_file)
# Écriture des lignes de données
for line in data:
csv_writer.writerow(line)
Mes données sont stockées dans une liste contenant… des listes. La première contient les en-têtes de mon fichier CSV, qui seront donc en première ligne, puis les données en elles-mêmes. Nous ouvrons ensuite un fichier en mode w (write, c’est-à-dire écriture) nommé new_list.csv. La boucle for permet ensuite, pour chaque entrée de ma liste data, d’écrire à l’intérieur de notre nouveau fichier CSV avec writerow().
Une fois ce code exécuté, vous trouverez dans le répertoire courant un nouveau fichier nommé new_list.csv, contenant nos trois colonnes et les informations souhaitées :
Écriture d’un fichier CSV en python avec csv.writerow().
Par défaut, le délimiteur utilisé sera une virgule. À nouveau, vous pourrez en choisir un autre avec l’option delimiter=”” lors de la création de l’objet csv.writer(). Exemple :
csv_writer = csv.writer(csv_file, delimiter=”;”)
Dès lors, votre fichier CSV aura comme délimiteur un point-virgule.
Utilisation de csv.writerows()
Pour écrire plusieurs lignes d’un coup, vous pouvez aussi utiliser la méthode csv.writerows() qui prend une liste de listes (j’utilise ici la même liste data que précédemment) :
with open(“new_list2.csv”, “w”, newline=””, encoding=”utf-8″) as csv_file:
csv_writer = csv.writer(csv_file, delimiter=”;”)
csv_writer.writerows(data)
Cette méthode est plus rapide, car l’on évite de passer par une boucle for. Par contre, nous ne pouvons pas réaliser d’analyse ou de modification des données juste avant l’insertion (à moins de modifier directement l’objet data avant). Cela peut donc être utilisé ou non en fonction de vos besoins.
C. Modifier un fichier CSV existant avec Python
Maintenant que nous savons créer et lire un fichier CSV, nous pouvons nous attaquer à la modification d’un fichier déjà existant. L’idée est de charger le contenu dans un premier temps, d’apporter les changements voulus, puis de réécrire le tout dans un nouveau fichier.
Maintenant que nous avons fait nos premières expérimentations et que notre code commence à devenir plus conséquent, nous pouvons passer en mode “script” et quitter l’interpréteur Python interactif.
Pour illustrer cela, reprenons le fichier personnes.csv créé plus tôt. Imaginons qu’une année s’est écoulée, et qu’il nous faut incrémenter l’âge de chaque personne avant de sauvegarder le résultat dans personnes_plus_un.csv. Pour vous faciliter sa lecture, je vous mets une capture d’écran du contenu d’un tel script, ce qui permet de profiter de la coloration syntaxique. L’ensemble des instructions qu’il contient ne sont qu’une réutilisation de ce que nous venons de voir :
Exemple de script de modification d’un fichier CSV en Python.
Voici ce que donne l’exécution de ce script, et le contenu du fichier qu’il génère :
Lecture puis modification et enregistrement des données d’un fichier CSV en Python.
Grâce à cette approche, vous pouvez effectuer tous les changements nécessaires sur un fichier CSV (modifier des valeurs, ajouter ou supprimer des colonnes, etc.). En procédant toujours de la sorte : lecture, modification, écriture. Vous vous assurez d’avoir une structure claire et de ne pas écraser votre fichier original tant que vous n’êtes pas certain que tout est correct.
IV. Utilisation avancée : DictReader et DictWriter
Jusqu’ici, nous avons manipulé nos données CSV grâce à csv.reader et csv.writer, qui fonctionnent avec des listes Python. Cette approche est suffisante dans de nombreux cas, mais elle nécessite que nous travaillions de manière “linéaire”, ligne par ligne, en nous basant sur des index numériques pour identifier les colonnes.
Pour gagner en lisibilité, Python met également à notre disposition csv.DictReader et csv.DictWriter, qui s’appuient sur des dictionnaires. Ainsi, chaque ligne est transformée en un dictionnaire dans lequel les clés correspondent aux en-têtes (noms de colonnes). Cela permet d’écrire un code plus facile à lire et moins sujet aux erreurs pour des traitements ou fichiers plus complexes.
A. Lire un CSV avec DictReader
Reprenons, en exemple, notre fichier personnes.csv, qui contient une première ligne d’en‑tête : Prénom, Age, Profession. Nous allons le lire à l’aide de la fonction csv.DictReader() :
import csv
with open(“personnes.csv”, “r”, encoding=”utf-8″) as csv_file:
csv_dict = csv.DictReader(csv_file)
for line in csv_dict:
# Ici, chaque ligne est un dictionnaire
print(f”{line[“Prénom”]} a {line[“Age”]} ans et est {line[“Profession”]} !”)
Comme vous le voyez, nous utilisons ici le dictionnaire line pour aller chercher line[“Prénom”] puis line[“Age”], etc. Cela est plus simple à lire que lorsque nous utilisons les listes (line[0], line[1], etc.). Nous utilisons la clé du dictionnaire Python, plutôt que l’index d’une liste.
Avec csv.DictReader(), chaque itération de la boucle for renvoie un dictionnaire, par exemple :
{
“Prénom”: “Alice”,
“Age”: “30”,
“Profession”: “Ingénieure”
}
Voici le résultat attendu de ce code :
Utilisations de csv.DictReader() pour lire et afficher le contenu d’un fichier CSV.
B. Écrire un CSV avec DictWriter
De la même façon, si vous souhaitez écrire dans un fichier CSV tout en profitant de la clarté des dictionnaires Python, vous pouvez utiliser la fonction csv.DictWriter().
Imaginons que nous ayons des données sous forme de liste de dictionnaires, et que nous voulons créer un nouveau fichier CSV :
import csv
# Exemples de données (liste de dictionnaires)
data = [
{“Prénom”: “Alice”, “Age”: “30”, “Profession”: “Ingénieure”},
{“Prénom”: “Bob”, “Age”: “25”, “Profession”: “Designer”},
{“Prénom”: “Charlie”, “Age”: “35”, “Profession”: “Enseignant”}
]
with open(“personnes_dict.csv”, “w”, encoding=”utf-8″, newline=””) as csv_file:
# Définition les noms de colonnes (en-tête du CSV)
fieldnames = [“Prénom”, “Age”, “Profession”]
csv_dict_writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
# Écriture de la ligne d’en-tête
csv_dict_writer.writeheader()
# Écriture de chaque ligne de données
for line in data:
csv_dict_writer.writerow(line)
Une particularité ici, outre la définition de nos données dans un dictionnaire, est l’utilisation du paramètre fieldname lors de la création de notre objet csv.DictWriter. La liste fieldnames détermine l’ordre des clés pour l’écriture dans le fichier. C’est également ce qui sera écrit en haut du fichier CSV sous forme d’en‑tête.
Nous créons ensuite notre objet csv.DictWriter après avoir ouvert un fichier CSV en mode écriture, écrivons l’entête avec writeheader(), puis les lignes de notre dictionnaire avec writerow().
Grâce à fieldname, la fonction csv.DictWriter sait où placer chaque information grâce aux clés des dictionnaires.
Comme nous venons de le voir, l’utilisation de DictReader() et DictWriter() apporte une plus grande clarté, et donc une facilité de maintenance et d’évolution de votre code Python. Cela permet aussi de plus facilement manipuler les données dans votre code après les avoir récupérées ou avant de les enregistrer, ce qui permet la transformation ou l’agrégation de données plus complexes.
V. Conclusion
Le module csv de Python offre une solution simple et efficace pour lire, écrire et manipuler des fichiers CSV. Nous avons ici étudié les fonctions csv.reader(), csv.writer() pour travailler avec des listes, mais aussi csv.DictReader() et csv.DictWriter() pour travailler directement avec des dictionnaires, ce qui rend le code plus clair et moins sujet aux erreurs.
Le CSV reste aujourd’hui un format de choix lorsqu’il s’agit d’échanger des données entre différents outils, notamment grâce à sa simplicité et sa compatibilité. Avec ce tutoriel, vous avez désormais les principales clés pour manipuler ces fichiers en Python.
Et si vous souhaitez aller encore plus loin, n’hésitez pas à consulter la documentation officielle du module csv ainsi que notre tutoriel Écrire son premier script Python : guide pour débutants.
Enfin, indiquez-nous dans les commentaires si vous souhaitez plus de contenu relatif à Python sur notre site 🙂 !
Co-fondateur d’IT-Connect.fr.
Auditeur/Pentester chez Orange Cyberdéfense.