Python pour Mardown

import csv
import os
import re
# ==========================================
# 1. PARAMÈTRES (À MODIFIER)
# ==========================================
# Remplacez par les vrais chemins sur votre PC. 
# Gardez bien le 'r' devant les guillemets pour que Windows lise bien les anti-slash (\)
FICHIER_SOURCE = r"C:\Users\OneDrive\Documents\mes_indicateurs.csv" 
DOSSIER_OBSIDIAN = r"C:\Users\OneDrive\Documents\Vault_Obsidian\Indicateurs"
# Noms EXACTS de vos colonnes dans le tableur CSV
COL_TITRE = "Indicateur"      
COL_THEME = "Thème"           
COL_DESC = "Description"      
COL_SOURCE = "Source"         
# ==========================================
# 2. SCRIPT DE GÉNÉRATION
# ==========================================
def clean_filename(name):
    """ Supprime les caractères interdits pour les fichiers Windows """
    name = str(name).strip()
    return re.sub(r'[\\/*?:"<>|]', "", name)
if not os.path.exists(DOSSIER_OBSIDIAN):
    os.makedirs(DOSSIER_OBSIDIAN)
compteur = 0
print(f"Lecture du fichier : {FICHIER_SOURCE}")
# Lecture du CSV (encodage utf-8-sig gère les exports Excel)
with open(FICHIER_SOURCE, mode='r', encoding='utf-8-sig') as f:
    # Le séparateur standard d'Excel en français est souvent le point-virgule
    reader = csv.DictReader(f, delimiter=';')
    
    # Si les colonnes ne sont pas trouvées, on tente avec la virgule
    if COL_TITRE not in reader.fieldnames:
        f.seek(0)
        reader = csv.DictReader(f, delimiter=',')
        
    for row in reader:
        titre_brut = row.get(COL_TITRE, "")
        if not titre_brut:
            continue
            
        titre_propre = clean_filename(titre_brut)
        chemin_fichier = os.path.join(DOSSIER_OBSIDIAN, f"{titre_propre}.md")
        
        theme = row.get(COL_THEME, "Non défini")
        desc = row.get(COL_DESC, "Description à compléter...")
        source = row.get(COL_SOURCE, "À définir")
        # Le Template Obsidian (YAML Frontmatter + Corps)
        contenu_md = f"""---
type: indicateur
theme: {theme}
statut: à rédiger
---
# {titre_propre}
## 🎯 Définition
{desc}
## 📊 Données et Méthodologie
**Source principale :** {source}
- *Mettre à jour la méthode SIG ici...*
## 🕸️ Liens Systémiques
**Motifs urbains impactés :**
- [[Nom du Motif 1]]
**Indicateurs liés :**
- 
***
*Fiche générée automatiquement pour la matrice Alteris.*
"""
        
        with open(chemin_fichier, "w", encoding="utf-8") as out_f:
            out_f.write(contenu_md)
            
        compteur += 1
print(f"✅ Terminé ! {compteur} fiches créées avec succès dans le dossier Obsidian.")