Leçon 7 / 15

Lire un relevé de dépenses CSV

20 min Python — modules, erreurs et données Gratuit

Objectif : Charger les lignes d’un relevé CSV et convertir chaque montant en valeur numérique exploitable.

Un relevé CSV contient des dépenses sous forme de texte : une date, un libellé et un montant séparés par des délimiteurs. Tant que le montant reste une chaîne de caractères, vous ne pouvez pas le transmettre directement au calcul de total déjà présent dans votre projet. Vous allez lire les colonnes du fichier et convertir les montants en nombres.

Le module standard `csv` fournit des outils pour parcourir les lignes d’un relevé sans découper manuellement chaque ligne. Vous allez ajouter la lecture dans `depenses/fichiers.py`, en laissant `transactions.py` responsable des calculs métier et `main.py` inchangé pour l’instant.

Le format du relevé

Pour cet exemple, le relevé utilise une ligne d’en-tête avec les noms `date`, `libelle` et `montant`. Les lignes suivantes contiennent une dépense par ligne, avec une virgule comme séparateur. Le montant utilise un point décimal, comme `42.80`, afin de pouvoir être converti directement en nombre par Python.

Texte
date,libelle,montant
2025-01-15,Courses,42.80
2025-01-16,Transport,18.50

Vous utiliserez `csv.DictReader` pour lire chaque ligne sous la forme d’un dictionnaire dont les clés proviennent de l’en-tête. Les valeurs lues sont des chaînes de caractères, y compris le montant. La fonction ci-dessous transforme uniquement ce dernier en `float` et renvoie une liste de transactions exploitable par les autres modules.

Créer le lecteur CSV

Créez `depenses/fichiers.py` avec le contenu complet ci-dessous. Le fichier est ouvert avec `with`, qui garantit sa fermeture à la fin du bloc, y compris si une erreur survient pendant la lecture. L’argument `newline=""` est recommandé par le module `csv` pour traiter correctement les fins de ligne.

Texte
import csv


def lire_releve_csv(chemin):
    """Lit un relevé CSV et convertit les montants en nombres."""
    transactions = []

    with open(chemin, "r", newline="", encoding="utf-8") as fichier:
        lecteur = csv.DictReader(fichier)
        for ligne in lecteur:
            transaction = {
                "date": ligne["date"],
                "libelle": ligne["libelle"],
                "montant": float(ligne["montant"]),
            }
            transactions.append(transaction)

    return transactions

La fonction attend que le fichier ait les colonnes prévues. Elle ne contrôle pas encore toutes les erreurs de structure ou de contenu : cette validation sera abordée dans la leçon suivante. Si un montant ne peut pas être converti, `float` lève une erreur au lieu de produire une valeur trompeuse.

Exécuter la lecture et vérifier le résultat

Enregistrez le relevé présenté plus haut dans un fichier accessible depuis la racine du projet, par exemple `releve.csv`. Depuis cette même racine, appelez la fonction en lui transmettant le chemin du fichier. Cette vérification autonome vous permet de voir les types obtenus avant d’intégrer l’import au point d’entrée de l’application.

Texte
from depenses.fichiers import lire_releve_csv

transactions = lire_releve_csv("releve.csv")
print(transactions)
print(type(transactions[0]["montant"]).__name__)
Résultat attendu
[{'date': '2025-01-15', 'libelle': 'Courses', 'montant': 42.8}, {'date': '2025-01-16', 'libelle': 'Transport', 'montant': 18.5}]
float

La liste contient deux dictionnaires, et chaque montant est maintenant un nombre `float`. `total_depenses` attend une suite de montants, pas une liste de dictionnaires : vous pouvez donc extraire les valeurs pour effectuer le calcul, sans modifier la fonction métier existante. Le traitement complet de cet import dans l’application sera assemblé plus tard dans le parcours.

Texte
montants = [transaction["montant"] for transaction in transactions]
print(montants)
Résultat attendu
[42.8, 18.5]

À retenir

  • `csv.DictReader` associe les valeurs de chaque ligne aux noms de colonnes de l’en-tête.
  • `with open(...)` assure la fermeture du fichier après la lecture.
  • Les champs CSV sont lus comme du texte ; convertissez le montant avant de l’utiliser dans un calcul.
  • Laissez les erreurs remonter plutôt que de faire croire que l’import a réussi.

Envie d'aller plus loin ?

Les cours Enovatic sont gratuits et le resteront. Si vous cherchez un accompagnement encadré, nos formations professionnelles sont animées par les mêmes formateurs.