Ranger des dossiers, préfixer des factures par leur date, ordonner des photos ou des exports comptables : renommer des fichiers un par un reste une habitude étonnamment répandue. C’est répétitif, sujet aux fautes de frappe, et rien ne garantit que deux fichiers ne finiront pas avec le même nom. Or la bibliothèque standard de Python suffit à confier ce travail à la machine, sans installer quoi que ce soit. Voici un petit programme complet, pensé pour être lisible et prudent avant d’être malin.
Une corvée quotidienne que l’ordinateur peut faire seul
Le besoin est presque toujours le même : ajouter la date du jour au début de chaque nom de fichier, par exemple pour obtenir 2026-07-21_rapport.pdf. Fait à la souris, ce geste demande de sélectionner, cliquer, taper, valider, puis recommencer. Répété sur vingt ou trente éléments, il devient une source d’erreurs. L’idée ici est simple : décrire la règle une seule fois, et laisser le script l’appliquer à tout un dossier de façon cohérente.
Le script complet, en Python standard
Copiez ce code dans un fichier nommé prefixe_date.py, à côté du dossier à traiter :
from pathlib import Path
from datetime import date
DOSSIER = Path("mes_fichiers")
DRY_RUN = True
prefixe = date.today().isoformat() + "_"
for fichier in sorted(DOSSIER.iterdir()):
if not fichier.is_file() or fichier.name.startswith(prefixe):
continue
cible = fichier.with_name(prefixe + fichier.name)
if cible.exists():
print(f"Collision ignoree : {cible.name}")
continue
print(f"{fichier.name} -> {cible.name}")
if not DRY_RUN:
fichier.rename(cible)
Lancez-le depuis un terminal avec python prefixe_date.py. Tel quel, il n’écrit rien : il se contente d’afficher ce qu’il ferait.
Ce que fait chaque partie du code
La classe Path de pathlib représente un chemin de façon portable entre Windows, macOS et Linux. DOSSIER.iterdir() parcourt son contenu, et sorted(...) garantit un ordre stable et prévisible d’un passage à l’autre. Le test fichier.is_file() écarte les sous-dossiers, tandis que startswith(prefixe) évite de préfixer deux fois un fichier déjà traité.
La méthode with_name reconstruit un nom cible sans toucher au reste du chemin. Le point le plus important tient dans la ligne if cible.exists() : c’est la protection contre les collisions. Si un fichier portant déjà le nom d’arrivée existe, le script l’ignore au lieu d’écraser des données. Enfin, rename n’est appelé que lorsque DRY_RUN vaut False.
Tester sans rien casser
La variable DRY_RUN = True est votre filet de sécurité. Gardez-la ainsi pour un premier essai : vous verrez la liste des renommages prévus, sans modification réelle. Vérifiez que les correspondances affichées vous conviennent, puis, seulement à ce moment, passez la valeur à False pour appliquer les changements. Par prudence, travaillez d’abord sur une copie du dossier, ou sur un répertoire de test contenant quelques fichiers factices. Ainsi, même une règle mal formulée reste sans conséquence.
Adapter le script à vos besoins
La structure se prête à de nombreuses variantes, en changeant surtout la construction de prefixe ou de cible :
- Filtrer par extension en ajoutant une condition comme
fichier.suffix == ".pdf". - Utiliser un suffixe avant l’extension avec
fichier.stemetfichier.suffixplutôt qu’un préfixe. - Descendre dans les sous-dossiers en remplaçant
iterdir()parrglob("*"). - Gérer les collisions en ajoutant un numéro incrémental au lieu d’ignorer le fichier.
Le principe reste identique : décrire une transformation de nom, prévisualiser, protéger contre l’écrasement, puis exécuter. Une fois cette base comprise, vous pouvez la réutiliser pour des dizaines de tâches de classement, en gardant toujours le réflexe de commencer par un passage en mode simulation. C’est ce cadre prudent, plus que l’astuce elle-même, qui rend l’automatisation fiable au quotidien.




