Leçon 20 / 20

Exporter et contrôler le récapitulatif

25 min Python — bases du langage Gratuit

Objectif : Écrire un récapitulatif des dépenses dans un fichier CSV et vérifier son contenu.

Une liste de dépenses et ses totaux sont utiles tant que le programme tourne, mais ils disparaissent à sa fermeture. Vous allez ajouter un export CSV pour conserver un récapitulatif lisible dans un tableur ou dans un éditeur de texte. Le script produira un fichier avec une ligne par dépense et une ligne pour chaque total par catégorie.

Vous disposez déjà d’une fonction qui calcule le total général et les sous-totaux par catégorie ; réutilisez-la plutôt que de refaire ces calculs. L’export interviendra après l’ajout de la dépense saisie et l’affichage des totaux. Le fichier sera nommé `recapitulatif_depenses.csv` et créé dans le même dossier que `suivi_depenses.py`.

Écrire des lignes CSV

Le module standard `csv` fournit un rédacteur qui transforme des listes de valeurs en lignes CSV correctement séparées. Pour ouvrir le fichier, utilisez `open()` avec le mode `"w"` : ce mode crée le fichier s’il n’existe pas et remplace son contenu s’il existe déjà. Le bloc `with` ferme automatiquement le fichier à la fin de son traitement, y compris si une erreur survient pendant l’écriture.

Ajoutez l’import de `csv`, puis définissez `exporter_recapitulatif()` avant `main()`. Cette fonction reçoit les données déjà calculées en paramètres, écrit une ligne d’en-tête, les dépenses, le total général et les totaux par catégorie. Elle reste courte et respecte la convention du projet de ne pas dépasser 20 lignes par fonction.

Texte
import csv

# Conservez ici les autres imports éventuels du fichier.

def exporter_recapitulatif(liste_depenses, total_general, totaux_categories):
    """Écrit les dépenses et leurs totaux dans un fichier CSV."""
    with open("recapitulatif_depenses.csv", "w", encoding="utf-8", newline="") as fichier:
        redacteur = csv.writer(fichier)
        redacteur.writerow(["Type", "Catégorie", "Description", "Montant"])
        for depense in liste_depenses:
            redacteur.writerow([
                "Dépense",
                depense["categorie"],
                depense["description"],
                f"{depense['montant']:.2f}",
            ])
        redacteur.writerow(["Total général", "", "", f"{total_general:.2f}"])
        for categorie, total in totaux_categories.items():
            redacteur.writerow(["Total catégorie", categorie, "", f"{total:.2f}"])

# Dans main(), après le calcul des totaux :
# exporter_recapitulatif(depenses, total_general, totaux_categories)

Les montants sont écrits avec deux chiffres après la virgule afin que le récapitulatif soit facile à lire. Le rédacteur CSV se charge des séparateurs et de l’échappement nécessaire quand une description contient une virgule ou des guillemets. Les montants restent des valeurs textuelles dans le fichier, ce qui convient à un export destiné à la consultation et à l’import dans un tableur.

Intégrer l’export et contrôler le résultat

Dans `main()`, appelez la fonction d’export après avoir obtenu les résultats de `calculer_totaux_par_categorie(depenses)`. Conservez les noms de variables utilisés dans votre fichier : l’exemple ci-dessous montre l’enchaînement attendu, sans remplacer les autres étapes de saisie et d’affichage déjà en place. L’export reçoit la liste mise à jour, donc il inclut la dépense qui vient d’être saisie.

Texte
total_general, totaux_categories = calculer_totaux_par_categorie(depenses)
print(f"Total général : {total_general:.2f} €")
for categorie, total in totaux_categories.items():
    print(f"{categorie} : {total:.2f} €")

exporter_recapitulatif(depenses, total_general, totaux_categories)
print("Récapitulatif écrit dans recapitulatif_depenses.csv.")
Résultat attendu
Le terminal affiche les totaux, puis :
Récapitulatif écrit dans recapitulatif_depenses.csv.

Pour contrôler le résultat, ouvrez `recapitulatif_depenses.csv` dans un tableur ou un éditeur de texte. Vérifiez que la première ligne contient les colonnes attendues, que chaque dépense apparaît une fois et que le total général correspond à la somme des dépenses. Comparez également les lignes de totaux par catégorie aux résultats affichés par le script.

Texte
Type,Catégorie,Description,Montant
Dépense,Transport,Ticket de métro,2.10
Dépense,Alimentation,Déjeuner,12.50
Total général,,,14.60
Total catégorie,Transport,,2.10
Total catégorie,Alimentation,,12.50

À retenir

  • Le module `csv` écrit des lignes structurées sans que vous ayez à gérer vous-même les séparateurs.
  • `with open(..., "w", encoding="utf-8", newline="")` crée ou remplace le fichier et assure sa fermeture.
  • Exportez la liste et les totaux déjà calculés pour éviter de dupliquer les traitements.
  • Contrôlez le fichier généré en comparant ses dépenses et ses totaux avec les résultats du script.

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.