Projet

Automatiser ses fichiers CSV avec Python simplement en 2026

Apprenez à lire, modifier et créer un fichier CSV avec Python. Un mini-projet concret pour automatiser vos tableaux sans bibliothèque complexe.

Par Julien Mercier 8 min de lecture
Automatiser ses fichiers CSV avec Python simplement en 2026

Un fichier CSV est l’un des formats les plus simples pour échanger des données sous forme de tableau. On en récupère après un export depuis une banque, un outil de facturation, un formulaire en ligne ou un logiciel métier. Avec Python, il est possible de lire ces fichiers, de sélectionner certaines lignes, de modifier des valeurs et de créer un nouveau tableau automatiquement.

Ce guide utilise uniquement le module csv, fourni avec Python. Il n’y a donc aucune bibliothèque à installer. L’objectif est de comprendre une méthode réutilisable, puis de l’appliquer à un petit projet concret : créer un résumé de dépenses à partir d’un export CSV.

Pourquoi les fichiers CSV restent utiles pour automatiser des tâches

CSV signifie Comma-Separated Values, c’est-à-dire « valeurs séparées par des virgules ». Dans la pratique, un fichier CSV contient généralement :

  • une première ligne avec les noms des colonnes ;
  • une ligne par donnée ou opération ;
  • un séparateur entre les cellules, qui peut être une virgule, un point-virgule ou une tabulation.

Voici un exemple simple de fichier nommé contacts.csv :

nom,email,ville
Alice,[email protected],Lille
Benoît,[email protected],Lyon
Chloé,[email protected],Nantes

Ce format est volontairement peu complexe. Il s’ouvre dans un éditeur de texte, dans LibreOffice Calc, dans Microsoft Excel et dans de nombreux outils en ligne. C’est pour cette raison qu’il est encore très présent dans les exports de données.

Automatiser un CSV avec Python peut notamment servir à :

  • retirer les lignes incomplètes d’un export de formulaire ;
  • extraire uniquement les commandes d’un certain statut ;
  • uniformiser des noms, des dates ou des catégories ;
  • calculer un total par client, par mois ou par type de dépense ;
  • produire un fichier nettoyé à transmettre à une autre personne ou à un autre outil.

Un CSV n’est pas un format adapté à tous les cas. Il devient limité pour des données très volumineuses, des relations complexes entre plusieurs tableaux ou une gestion multi-utilisateur. Mais pour traiter un export ponctuel ou récurrent, c’est une excellente porte d’entrée vers l’automatisation.

Avant d’écrire du code, ouvrez toujours le CSV dans un éditeur de texte. Vous verrez immédiatement le séparateur utilisé, les noms exacts des colonnes et la présence éventuelle d’une ligne d’en-tête.

Préparer son dossier et vérifier la structure du CSV

Pour éviter les erreurs de chemin de fichier, créez un dossier dédié à votre projet. Par exemple :

automatisation_csv/
├── depenses.csv
└── resume_depenses.py

Placez votre script Python et votre fichier CSV au même endroit. Vous pourrez ainsi utiliser simplement le nom du fichier, sans avoir à écrire un chemin complet.

Les exports CSV français utilisent fréquemment le point-virgule comme séparateur. Voici un exemple réaliste de structure pour un fichier depenses.csv :

date;categorie;libelle;montant
2026-01-03;Alimentation;Supermarché;-42.65
2026-01-05;Transport;Abonnement transport;-32.80
2026-01-08;Loisirs;Cinéma;-12.50
2026-01-10;Alimentation;Boulangerie;-6.20

Dans cet exemple, les montants sont écrits avec un point décimal afin de pouvoir être convertis directement avec float(). Si votre fichier contient des montants comme -42,65, il faudra remplacer la virgule par un point avant la conversion.

La structure doit rester cohérente : une ligne de données doit contenir le même nombre de colonnes que l’en-tête. Si certaines cellules contiennent elles-mêmes des virgules, des points-virgules ou des retours à la ligne, un CSV correctement exporté les entourera habituellement de guillemets.

Le module standard csv de Python est conçu pour gérer ces situations, à condition d’indiquer le bon séparateur.

Lire un CSV proprement avec le module csv de Python

Pour commencer, importez le module csv. Il est inclus dans la bibliothèque standard : aucune commande pip install n’est nécessaire.

Il existe deux approches principales :

  • csv.reader lit chaque ligne sous la forme d’une liste ;
  • csv.DictReader lit chaque ligne sous la forme d’un dictionnaire, en utilisant les noms de colonnes.

Pour un débutant, DictReader est souvent plus lisible. Au lieu d’utiliser des positions comme ligne[2], vous pouvez écrire ligne["categorie"].

Lire les lignes avec DictReader

import csv

with open("depenses.csv", mode="r", encoding="utf-8", newline="") as fichier:
    lecteur = csv.DictReader(fichier, delimiter=";")

    for ligne in lecteur:
        print(ligne["date"], "-", ligne["categorie"], "-", ligne["montant"])

Ce programme peut afficher :

2026-01-03 - Alimentation - -42.65
2026-01-05 - Transport - -32.80
2026-01-08 - Loisirs - -12.50
2026-01-10 - Alimentation - -6.20

Plusieurs éléments sont importants :

  • mode="r" signifie que le fichier est ouvert en lecture ;
  • encoding="utf-8" permet de lire correctement les accents dans de nombreux fichiers ;
  • newline="" est recommandé par la documentation Python lors de l’utilisation du module csv ;
  • delimiter=";" indique que le séparateur est le point-virgule ;
  • le bloc with referme le fichier automatiquement à la fin du traitement.

Si votre fichier est séparé par des virgules, remplacez simplement delimiter=";" par delimiter=",", ou omettez cet argument : la virgule est le séparateur par défaut de csv.

Afficher une ligne entière pour comprendre les données

Lors de votre premier essai, afficher le dictionnaire complet aide à vérifier les noms de clés :

import csv

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

    for ligne in lecteur:
        print(ligne)
        break

Le break arrête la boucle après la première ligne. C’est pratique pour inspecter rapidement la structure sans afficher tout le fichier. Si une clé ne correspond pas à ce que vous attendiez, vérifiez l’en-tête du CSV caractère par caractère.

Pour revoir les bases sur les fichiers texte, consultez aussi notre guide lire, écrire et modifier des fichiers avec Python.

Filtrer et modifier les données d’un tableau CSV

Lire un fichier est une première étape. L’automatisation devient utile quand on applique une règle aux lignes : ne garder qu’une catégorie, modifier un texte ou ignorer les données incomplètes.

Imaginons que vous vouliez afficher uniquement les dépenses liées à l’alimentation :

import csv

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

    for ligne in lecteur:
        if ligne["categorie"] == "Alimentation":
            print(ligne["libelle"], ":", ligne["montant"], "€")

La condition if est évaluée pour chaque ligne. Seules les lignes dont la colonne categorie contient exactement Alimentation sont affichées. Si vous débutez avec cette syntaxe, l’article sur les conditions if, elif et else en Python peut vous aider.

Nettoyer un texte et convertir un montant

Les données exportées ne sont pas toujours parfaitement propres. Un libellé peut contenir des espaces inutiles, et une valeur lue depuis un CSV est toujours du texte au départ.

montant_texte = "-42,65"
montant = float(montant_texte.replace(",", "."))

print(montant)

La méthode replace(",", ".") remplace la virgule décimale par un point. Ensuite, float() convertit le texte en nombre décimal. Cette conversion est indispensable avant d’additionner les montants.

Pour nettoyer une catégorie :

categorie = ligne["categorie"].strip().title()
  • strip() retire les espaces au début et à la fin ;
  • title() met une majuscule au début de chaque mot.

Attention : ces transformations ne changent pas automatiquement le fichier d’origine. Elles modifient seulement la valeur stockée dans votre programme. Pour conserver le résultat, il faut écrire un nouveau CSV.

Créer un nouveau fichier CSV avec DictWriter

Il est préférable de créer un nouveau fichier plutôt que d’écraser immédiatement l’export original. Vous gardez ainsi une copie de la donnée source et pouvez comparer le résultat.

L’outil adapté est csv.DictWriter. Vous lui donnez la liste des colonnes à écrire, puis vous créez l’en-tête avec writeheader().

Le script suivant garde uniquement les dépenses de la catégorie Alimentation et les enregistre dans depenses_alimentation.csv :

import csv

colonnes = ["date", "categorie", "libelle", "montant"]

with open("depenses.csv", encoding="utf-8", newline="") as fichier_source:
    lecteur = csv.DictReader(fichier_source, delimiter=";")

    with open("depenses_alimentation.csv", mode="w", encoding="utf-8", newline="") as fichier_sortie:
        ecrivain = csv.DictWriter(
            fichier_sortie,
            fieldnames=colonnes,
            delimiter=";"
        )

        ecrivain.writeheader()

        for ligne in lecteur:
            if ligne["categorie"] == "Alimentation":
                ecrivain.writerow(ligne)

Le mode "w" signifie « écriture ». Si le fichier de sortie existe déjà, son contenu est remplacé. Choisissez donc un nom de fichier explicite et différent du fichier source.

Vous pouvez aussi modifier une valeur avant de l’écrire :

ligne["categorie"] = ligne["categorie"].strip().title()
ecrivain.writerow(ligne)

Dans ce cas, la ligne nettoyée est ajoutée au nouveau fichier. Le fichier initial reste intact.

Mini-projet : produire un résumé automatique de dépenses

Passons à un cas complet. Nous allons lire un fichier de dépenses, additionner les montants par catégorie, puis créer un fichier resume_depenses.csv.

Le fichier source attendu est celui présenté plus haut :

date;categorie;libelle;montant
2026-01-03;Alimentation;Supermarché;-42.65
2026-01-05;Transport;Abonnement transport;-32.80
2026-01-08;Loisirs;Cinéma;-12.50
2026-01-10;Alimentation;Boulangerie;-6.20

Voici le programme complet :

import csv

totaux_par_categorie = {}

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

    for ligne in lecteur:
        categorie = ligne["categorie"].strip()

        montant_texte = ligne["montant"].strip()
        montant = float(montant_texte.replace(",", "."))

        if categorie not in totaux_par_categorie:
            totaux_par_categorie[categorie] = 0

        totaux_par_categorie[categorie] += montant

with open("resume_depenses.csv", mode="w", encoding="utf-8", newline="") as fichier:
    ecrivain = csv.DictWriter(
        fichier,
        fieldnames=["categorie", "total"],
        delimiter=";"
    )

    ecrivain.writeheader()

    for categorie, total in totaux_par_categorie.items():
        ecrivain.writerow({
            "categorie": categorie,
            "total": round(total, 2)
        })

print("Le fichier resume_depenses.csv a été créé.")

Le dictionnaire totaux_par_categorie stocke un total pour chaque catégorie. Après le traitement des quatre lignes d’exemple, il contient l’équivalent de :

{
    "Alimentation": -48.85,
    "Transport": -32.80,
    "Loisirs": -12.50
}

Le fichier produit contient alors :

categorie;total
Alimentation;-48.85
Transport;-32.8
Loisirs;-12.5

round(total, 2) arrondit la valeur à deux décimales dans Python. Selon le logiciel utilisé pour ouvrir le CSV, l’affichage peut tout de même ne pas montrer un zéro final, par exemple -32.8 au lieu de -32.80. Il s’agit d’une question d’affichage du tableur, pas d’un échec du calcul.

Ce mini-projet mobilise plusieurs notions fondamentales :

  • la lecture ligne par ligne d’un fichier ;
  • les dictionnaires Python ;
  • les conditions ;
  • la conversion de texte en nombre ;
  • l’écriture d’un nouveau CSV.

Si la logique des clés et valeurs vous paraît encore nouvelle, relisez le guide consacré aux dictionnaires Python pour débutants.

Éviter les erreurs fréquentes avec les CSV

Les problèmes rencontrés avec les CSV viennent souvent du fichier exporté plutôt que de Python lui-même. Voici les vérifications les plus utiles.

Le mauvais séparateur

Si toutes les données arrivent dans une seule colonne, le séparateur déclaré dans le code ne correspond probablement pas au fichier. Testez delimiter=";", delimiter="," ou, pour un fichier séparé par tabulations, delimiter="\t".

Une erreur de nom de colonne

Avec DictReader, ligne["montant"] exige une colonne qui s’appelle exactement montant. Les majuscules, les accents et les espaces comptent. Affichez la première ligne sous forme de dictionnaire pour identifier les clés réellement disponibles.

Une conversion float impossible

Une erreur ValueError lors de float() peut indiquer une cellule vide, un symbole monétaire ou une virgule décimale. Inspectez la valeur avant la conversion :

print(repr(ligne["montant"]))

repr() rend visibles certains caractères, notamment les espaces. Vous pourrez ensuite nettoyer ou ignorer les lignes concernées selon votre besoin.

Un problème d’encodage

Si les accents s’affichent mal ou si Python signale une erreur de décodage, le fichier n’est peut-être pas encodé en UTF-8. L’encodage dépend de l’outil qui a créé l’export. Ne changez pas les données au hasard : ouvrez le fichier dans un éditeur de texte, vérifiez son encodage si l’outil le permet, puis adaptez l’argument encoding.

Enfin, lorsqu’une erreur survient, lisez le message complet et la ligne indiquée dans le terminal. Notre article pour comprendre un traceback Python donne une méthode simple pour remonter à la source du problème.

Faire évoluer cette automatisation progressivement

Une fois le premier script fonctionnel, vous pouvez l’améliorer sans tout recommencer. Par exemple :

  • demander le nom du fichier avec input() ;
  • ignorer les lignes dont la catégorie ou le montant est vide ;
  • ajouter un total général à la fin du résumé ;
  • filtrer les opérations selon une période présente dans la colonne de date ;
  • créer un fichier de sortie différent à chaque traitement ;
  • placer votre script dans un dossier contenant régulièrement de nouveaux exports.

Ne cherchez pas à automatiser toutes les variantes dès le début. Un script qui traite correctement un seul format de CSV est déjà utile. Ensuite, vous pouvez ajouter une amélioration, tester avec une copie de vos données, puis passer à la suivante.

Le module csv suffit largement pour comprendre le mécanisme des tableaux et construire des automatisations personnelles fiables. Prenez un petit export réel, travaillez toujours sur une copie et adaptez le mini-projet à vos propres colonnes : c’est la meilleure manière de passer de l’exercice à un outil vraiment utile au quotidien.

Commentaires · Aucun commentaire pour l'instant

Soyez le premier à réagir.

Laisser un commentaire