Schrek.fr

Table des matières

L’objectif est de générer plusieurs lettres personnalisées à partir d’un seul modèle Jinja2 (modele.txt), en utilisant une liste de personnes avec leurs informations respectives.

Structure du projet

projet/
├── modele.txt
├── script.py
└── donnees.csv

modele.txt

Bonjour {{ nom }},

Nous vous remercions pour votre commande du {{ date_commande }}.
Votre numéro de commande est : {{ numero_commande }}.

Cordialement,

L'équipe {{ entreprise }}

donnees.csv

nom,date_commande,numero_commande,entreprise
Alice Dupont,2025-07-06,CMD123456,Linux
Bob Martin,2025-07-05,CMD123457,Gnu
Claire Dubois,2025-07-04,CMD123458, Firefox

script.py

import csv
from jinja2 import Environment, FileSystemLoader
from pathlib import Path

# On initialise l'environnement Jinja2 en précisant où se trouvent les modèles
# Ici, le modèle 'modele.txt' se trouve dans le même dossier que ce script ('.')
env = Environment(loader=FileSystemLoader('.'))

# On charge le fichier modèle Jinja2
template = env.get_template('modele.txt')

# On crée un dossier "lettres" s'il n'existe pas déjà, pour y stocker les lettres générées
Path("lettres").mkdir(exist_ok=True)

# On ouvre le fichier CSV contenant les données des destinataires
with open('donnees.csv', newline='', encoding='utf-8') as csvfile:
    # On lit le fichier CSV ligne par ligne en utilisant les noms de colonnes comme clés
    reader = csv.DictReader(csvfile)
    
    # On parcourt chaque ligne du fichier (chaque destinataire)
    for i, row in enumerate(reader, start=1):
        # On utilise les données de la ligne pour remplir le modèle Jinja2
        message = template.render(row)
        
        # On construit un nom de fichier à partir du nom de la personne
        # Les espaces sont remplacés par des underscores pour éviter les problèmes
        nom_fichier = f"lettres/lettre_{row['nom'].replace(' ', '_')}.txt"
        
        # On écrit le contenu généré dans un fichier texte dans le dossier 'lettres'
        with open(nom_fichier, 'w', encoding='utf-8') as f:
            f.write(message)

        # On affiche une confirmation dans la console
        print(f"Lettre générée : {nom_fichier}")

Téléchargement

  • donnees.csv
  • modele.txt
  • script.py
  • Liens

    https://jinja.palletsprojects.com/en/stable/

    https://blog.stephane-robert.info/docs/developper/programmation/python/jinja/

    https://iac.goffinet.org/ansible-network/templating-jinja2/


    Métadonnées

    Posté le: 01.09.2025
    Nombre de mots: 281
    Temps de lecture: 2 minutes
    Cet article fait partie de la série: Jinja2