Script Python pour renommer des fichiers en masse : Automatisez votre organisation
Il est 16h55, vous êtes à 5 minutes d'avoir terminé votre journée.
Bien évidemment, il est inutile de commencer une tâche si tard dans la journée, alors vous faites semblant de travailler, discipline dont vous êtes passé maître au fil du temps...
Malheureusement, Corine du déparment compatibilité viens juste de vous envoyer un dossier...
Le dossier contient 4 500 photos de l'inventaire annuel qui s'appellent toutes IMG_2024_scrogneugneu_(1).jpg.
Corinne exige qu'elles soient renommées en Inventaire_Q4_0001.jpg pour demain matin 9h00. Elle vous annonce cela avec son sourire passif-agressif car elle sait trés bien qu'elle vient de ruiner votre soirée Netflix.
Vous avez alors deux choix.
- Le premier : sélectionner le dossier, puis F2, taper le nouveau nom puis Entrée. Répéter l'opération 4500 fois jusqu'à ce que le syndrome du canal carpien transforme votre main en pince Facom. C'est la méthode de l'esclave moderne. C'est ce que Corinne attend de vous.
- Le second choix : laisser la machine faire le sale boulot à votre place.
Nous allons écrire un script qui va réduire ces heures de souffrance à une exécution de 0,4 seconde.
Ce n'est pas de la magie, c'est de l'automatisation.
C'est votre meilleure arme dans cette guerre d'usure qu'est le travail de bureau.
Aujourd'hui, vous allez apprendre à créer un script Python pour renommer vos fichiers en masse.
Mais avant cela et si ce n'est pas déjà fait, je vous invite à suivre mon guide d'installation Python, et vous familiariser avec le petit script qu'il contient.

Pourquoi vos dossiers sont toujours bordéliques.
Le système de fichiers d'une entreprise est une représentation assez fidèle de l'esprit humain : chaotique, redondant et rempli de choses inutiles.
Le problème ne vient pas de l'ordinateur, le problème est l'humain situé entre la chaise et le clavier.
Prenez Kévin, le stagiaire marketing, il pense que nommer un fichier final_final_V2_POUR_IMPRESSION_vraiment_la_bonne.pdf est une bonne pratique d'archivage.
Il ne se rend pas compte qu'il génère de l'entropie numérique car chaque fichier mal nommé est une petite dette technique que vous devrez payer un jour.
L'enfer des caractères spéciaux et des espaces
Les systèmes d'exploitation modernes sont trop permissifs.
Par exemple Windows laisse les utilisateurs mettre des espaces, des accents, voire des emojis dans les noms de fichiers. C'est une hérésie.
Le jour où ces données doivent être mogrée vers un serveur Linux ou un cloud un peu strict, tout explose, vous sentiez la douleur.
Les scripts de sauvegarde plantent, les liens se brisent.
Et qui doit réparer les dégâts ? C'est vous, pas Corine, elle est déjà partie faire son cours de Pilates.
Le renommage de fichiers en masse n'est pas seulement une question d'esthétique ou de maniaquerie, c'est une question de survie dans un écosystème hostile.
Un nom de fichier standardisé est un fichier facilement retrouvable et un fichier retrouvable est un fichier qui ne vous oblige pas à fouiller dans 200 sous-dossiers un vendredi soir.
La limite humaine du clic droit
On sait tous qu'il y a une limite humaine à la répétition, renommez 50 fois des fichiers en appuyant sur F2 résultera automatiquement à une erreur, une faute de frappe, un oubli, ou pire la suppression d'un fichier.
L'ordinateur, lui, ne s'ennuie pas et ne ressent pas la douleur. L'ordinateur ne pense à rien, il exécute.
C'est pour les raison ci-dessus que nous allons utiliser Python, pas parce que nous sommes des génies du code, mais parce que nous sommes paresseux et que nous tenons à notre santé mentale.

5 Bonnes Raisons d'Automatiser cette Tâche Immédiatement
Si vous essayez de justifier le temps passé à écrire ce script à votre manager, ne parlez pas de "code" mais "productivité". Voici la vérité.
- La domination par la compétence : Pendant que vos collègues pleurent devant l'explorateur Windows, vous appuyez sur un bouton et vous allez prendre un café.
- L'élimination de l'erreur humaine : Python ne sautera jamais un chiffre dans une séquence, sauf si vous lui demandez de le faire.
- La réversibilité (si vous êtes malin) : Quand on renomme à la main et qu'on se trompe, c'est fini. Par contre, avec un script bien fait, on peut toujours inclure un journal de modifications pour revenir en arrière.
- La satisfaction du propre : Voir 5000 fichiers passer de sdflkjsd.jpg à Client_A_0001.jpg procure une dose de dopamine étrange, presque malsaine, c'est de l'ordre imposé au chaos, et ça fait le plus grand bien.
- Le temps volé au patronat : Si la tâche était estimée à 4 heures et que vous la faites en 3 minutes, vous venez de gagner 3h57 de temps libre rémunéré (ne le dites à personne)
L'Arsenal Technique
Entrons dans le vif du sujet.
Nous n'allons pas utiliser des bibliothèques complexes, nous allons utiliser os, c'est vieux, c'est brut, c'est compatible avec tout.
Etant donné que Michel a probablement peur de supprimer des fichiers en scriptant, tous mes scripts incluent un mode "Simulation" (DRY_RUN), tant que ce mode est activé, le script n'entreprend aucune action sur les fichiers. On regarde juste ce qui se passerait si on avait le courage d'appuyer sur la détente.
Niveau 1 : Le Nettoyeur de Préfixe (Pour les dossiers de Corinne)
Ce script est simple, il prend tous les fichiers d'un dossier, enlève un morceau de texte "moche" au début, et le remplace par quelque chose de propre. Ce script est idéal pour virer les "Copie de..." ou les tags d'appareil photo.
Copiez le code ci-dessous et collez-le dans un fichier texte, appelez-le par exemple renommage_simple.py.
Ne l'exécutez pas avant d'avoir lu la zone de configuration.

import os
# --- ZONE DE CONFIGURATION (MODIFIEZ ICI MICHEL) ---
# Mettez le chemin de votre dossier entre les guillemets.
# Le 'r' devant est important pour que Windows ne panique pas avec les slashs.
DOSSIER_CIBLE = r"C:\Utilisateurs\Michel\Documents\Dossier_Bordelique"
# Ce qu'on veut enlever (ex: "IMG_")
TEXTE_A_ENLEVER = "Copie de "
# Ce qu'on veut mettre à la place (laisser vide "" pour juste supprimer)
NOUVEAU_PREFIXE = "Archive_"
# Mettez False UNIQUEMENT quand vous êtes sûr de vous.
# True = Simulation (affiche ce qui va se passer sans rien toucher)
DRY_RUN = True
# --- FIN DE LA CONFIGURATION ---
def renommage_basique():
if not os.path.exists(DOSSIER_CIBLE):
print(f"ERREUR: Le dossier {DOSSIER_CIBLE} n'existe pas. Vérifiez le chemin.")
return
compteur = 0
print(f"--- Démarrage du script dans : {DOSSIER_CIBLE} ---")
# On boucle sur chaque fichier du dossier
for nom_fichier in os.listdir(DOSSIER_CIBLE):
# On ne touche qu'aux fichiers qui contiennent le texte moche
if TEXTE_A_ENLEVER in nom_fichier:
# Création du nouveau nom
nouveau_nom = nom_fichier.replace(TEXTE_A_ENLEVER, NOUVEAU_PREFIXE)
# On construit les chemins complets (Indispensable pour l'ordinateur)
ancien_chemin = os.path.join(DOSSIER_CIBLE, nom_fichier)
nouveau_chemin = os.path.join(DOSSIER_CIBLE, nouveau_nom)
if DRY_RUN:
print(f"[SIMULATION] Renommer : '{nom_fichier}' ---> '{nouveau_nom}'")
else:
try:
os.rename(ancien_chemin, nouveau_chemin)
print(f"[OK] Renommé : '{nom_fichier}' ---> '{nouveau_nom}'")
except Exception as e:
print(f"[ERREUR] Impossible de renommer {nom_fichier} : {e}")
compteur += 1
print(f"--- Terminé. {compteur} fichiers traités. ---")
if __name__ == "__main__":
renommage_basique()
Niveau 2 : La Numérotation Séquentielle
Parfois, les noms d'origine sont tellement pourris qu'il faut tout raser, on ne veut rien garder, tout ce qu'on veut, c'est une séquence propre : Facture_001.pdf, Facture_002.pdf.
Le secret ici, c'est la fonction zfill.
C'est ce qui permet d'avoir 001 au lieu de 1, pourquoi c'est important ? Parce que sans ça, votre ordinateur va trier les fichiers comme un idiot : 1, 10, 11, 12... et le 2 se retrouvera loin derrière.
Utilisez ce code pour imposer une discipline militaire à vos dossiers :
import os
# --- ZONE DE CONFIGURATION ---
DOSSIER_CIBLE = r"C:\Utilisateurs\Michel\Images\Vacances_2023"
NOM_BASE = "Seminaire_Compta"
EXTENSION_FORCEE = ".jpg" # Assurez-vous que ce sont bien des JPG !
DRY_RUN = True
# -----------------------------
def renommage_sequentiel():
fichiers = os.listdir(DOSSIER_CIBLE)
# On trie pour ne pas numéroter n'importe comment (alphabétique par défaut)
fichiers.sort()
index = 1
print(f"--- Standardisation en cours... Mode Simulation: {DRY_RUN} ---")
for nom_fichier in fichiers:
# On ignore les fichiers cachés ou les dossiers
if nom_fichier.startswith(".") or os.path.isdir(os.path.join(DOSSIER_CIBLE, nom_fichier)):
continue
# zfill(4) va transformer 1 en 0001.
numero_formate = str(index).zfill(4)
# On garde l'extension d'origine si on veut être prudent,
# ou on force celle de la config.
# Ici, on reconstruit tout le nom.
_, ext_origine = os.path.splitext(nom_fichier)
# Sécurité : on garde l'extension d'origine si celle de la config est vide
extension_finale = EXTENSION_FORCEE if EXTENSION_FORCEE else ext_origine
nouveau_nom = f"{NOM_BASE}_{numero_formate}{extension_finale}"
ancien_chemin = os.path.join(DOSSIER_CIBLE, nom_fichier)
nouveau_chemin = os.path.join(DOSSIER_CIBLE, nouveau_nom)
if DRY_RUN:
print(f"[SIMULATION] {nom_fichier} ---> {nouveau_nom}")
else:
os.rename(ancien_chemin, nouveau_chemin)
print(f"[FAIT] {nouveau_nom}")
index += 1
if __name__ == "__main__":
renommage_sequentiel()
Niveau 3 : Le Chirurgien Regex
Là, on rentre dans la zone dangereuse.
Les expressions régulières (Regex), c'est puissant, mais si vous vous ratez, vous pouvez renommer vos photos de vacances en fichiers système.
Le but ici est d'extraire une partie spécifique du nom (comme une date ou un ID client) et de jeter le reste.
Si vous ne comprenez pas ce que fait le regex, ne touchez pas à la ligne re.search.
import os
import re # Bibliothèque pour les expressions régulières (Regex)
# --- ZONE DE CONFIGURATION ---
DOSSIER_CIBLE = r"C:\Utilisateurs\Michel\Downloads\WeTransfer_Bordel"
# REGEX EXPLIQUÉ :
# r"(\d{4}-\d{2}-\d{2})" -> Cherche une date au format YYYY-MM-DD
# C'est ce qu'on veut GARDER.
PATTERN_A_TROUVER = r"(\d{4}-\d{2}-\d{2})"
SUFFIXE_AJOUTE = "_Facture_Validated.pdf"
DRY_RUN = True
# -----------------------------
def renommage_chirurgical():
print("--- Démarrage de la chirurgie regex ---")
for nom_fichier in os.listdir(DOSSIER_CIBLE):
# Recherche du pattern dans le nom du fichier
match = re.search(PATTERN_A_TROUVER, nom_fichier)
if match:
# Si on trouve la date, on l'extrait.
# group(1) correspond à ce qui est entre parenthèses dans le regex.
partie_gardee = match.group(1)
nouveau_nom = f"{partie_gardee}{SUFFIXE_AJOUTE}"
if nouveau_nom != nom_fichier:
ancien = os.path.join(DOSSIER_CIBLE, nom_fichier)
nouveau = os.path.join(DOSSIER_CIBLE, nouveau_nom)
if DRY_RUN:
print(f"[SIMU] On garde '{partie_gardee}' -> {nouveau_nom}")
else:
os.rename(ancien, nouveau)
print(f"[OK] {nouveau_nom}")
else:
print(f"[SKIP] Pas de date trouvée dans : {nom_fichier}")
if __name__ == "__main__":
renommage_chirurgical()

Prévention et Maintenance : Empêcher le retour du chaos
Vous avez nettoyé le dossier, c'est beau, c'est propre, Félicitations!
Mais vous savez ce qui va se passer, lundi matin, Kévin va revenir et va déposer un fichier nommé Rapport_final (2) - copie.docx.
L'automatisation, c'est bien, mais l'éducation, c'est impossible. Vous ne changerez pas Kévin, cependant, vous pouvez mettre en place des barrières.
Standardiser l'entrée (Le rêve impossible)
Essayez d'imposer une convention de nommage au sein de votre département, DATE_PROJET_TYPE.ext, Imprimez-le et collez-le sur le mur. Corinne va bien évidement l'ignorer, mais au moins, vous aurez une trace écrite de son incompétence le jour où le serveur plantera.
Automatiser l'exécution (CronJobs et Tâches planifiées)
Le vrai niveau supérieur, ce n'est pas de lancer le script quand Corinne le demande, c'est de faire en sorte que le script se lance tout seul, tous les soirs à 23h, pendant que vous dormez.
Si vous êtes sous Windows, utilisez le "Planificateur de tâches", si vous êtes sous Linux (bravo), utilisez un Cron. Faites tourner le script de nettoyage sur les dossiers partagés publics, le lendemain, quand votre collègue cherchera son fichier mal nommé, il ne le trouvera pas, il apprendra...
Erreurs Communes : Comment ne pas se faire virer
L'automatisation est une arme à double tranchant, elle vous permet de travailler plus vite, c'est indéniable, mais elle vous permet aussi de faire des erreurs.
Voici comment éviter le désastre.
Écraser des fichiers existants : Si vous renommez tout le monde en image.jpg sans numérotation, le script va écraser le fichier précédent à chaque boucle. À la fin, il ne restera qu'une seule image : la dernière, et il ne vous restera que vos yeux pour pleurer.
Oublier l'extension : J'ai vu des gens renommer rapport.pdf en rapport_2024, sans le .pdf à la fin. Windows ne sait plus comment ouvrir le fichier, Corinne panique, elle appelle le support... Ne soyez pas celui qui oublie l'extension.
Lancer en Prod direct : Ne mettez jamais, JAMAIS DRY_RUN = False dès le premier essai, testez d'abord sur un dossier copié sur votre bureau. Le dossier de production n'est pas un laboratoire de test, c'est un champ de mines.
Chemins Absolus : Un script robuste ne doit pas dépendre de son contexte de lancement (le dossier d'où le script est lancé). Si vous écrivez juste mon_fichier.txt, vous faites le pari risqué que l'utilisateur soit déjà dans le bon dossier, et c'est un pari que vous allez probablement perdre. Utilisez toujours le chemin complet (C:\Users\Admin\Projet\mon_fichier.txt) pour garantir que votre code fonctionne, qu'il soit lancé par un humain ou par un serveur à 3h du matin.

Références:
- os.listdir() : Liste le bordel actuel.
- os.rename(vieux, neuf) : L'acte irréversible de changement.
- chaine.split() : Pour couper les noms en morceaux.
- zfill(3) : Pour transformer '1' en '001'. Essentiel.
- DRY_RUN : Votre assurance vie, toujours à True au début pour l'activer, et False pour le désactiver.
Vous avez maintenant les outils nécessaires, ce script Python n'est pas seulement du code, c'est un manifeste d'indépendance face à la bêtise administrative. A Utiliser sagement.
La prochaine étape pour vous ? Copiez le script et testez le sur un dossier. Lorsque le script s'exécutera, vous aurez grand plaisir à regardez la barre de progression défiler.
Si vous avez des questions, n'hésitez surtout pas à commenter, je vous répondrai avec grand plaisir :)
> Base_de_Données_FAQ
Q: Quelle est la différence entre 'os' et 'pathlib' pour renommer des fichiers ?
Q: Comment éviter d'écraser des fichiers existants avec mon script ?
Q: Puis-je annuler le renommage si je fais une erreur ?
Q: Ce script fonctionne-t-il sur Windows et Mac ?
Q: Est-il possible de renommer uniquement certains types de fichiers (ex: .jpg) ?
Rejoignez la Résistance.
Recevez le Pack de Survie Office + 1 astuce d'automatisation par semaine.
Données protégées. Zéro spam.
Jérémy
J'ai passé 6 ans dans le Support Technique à résoudre des cas complexes. Maintenant, je montre aux employés de bureau comment gagner du temps avec Python et Google Suite.
@Twitter