Skip to main content

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.")