Renommer et déplacer des fichiers en masse
Introduction
Imaginez que vous rentrez de vacances avec 347 photos nommées IMG_0001.jpg, IMG_0002.jpg... et que vous souhaitez les renommer en Vacances_2024_001.jpg, tout en les classant dans des dossiers par date. Le faire à la main prendrait des heures. Avec Python, cela prend quelques secondes.
Vous travaillez comme assistant administratif pour une petite entreprise. Le service comptabilité vous envoie chaque mois un dossier contenant des centaines de factures scannées avec des noms incohérents (scan001.pdf, facture_final2.pdf, doc(3).pdf...).
Votre défi
Votre mission : écrire un script Python qui renomme automatiquement tous ces fichiers selon un format standard (Facture_2024_001.pdf) et les déplace dans des dossiers organisés par mois.
Les outils essentiels : os et shutil
Python possède deux modules natifs indispensables pour manipuler des fichiers :
| Module | Rôle principal | Fonctions clés |
|---|---|---|
os | Interagir avec le système de fichiers | os.listdir(), os.rename(), os.path.join() |
shutil | Copier/déplacer des fichiers et dossiers | shutil.move(), shutil.copy() |
pathlib | Approche moderne orientée objet | Path.rename(), Path.glob() |
💡 À retenir :
os.rename()sert à renommer un fichier dans le même dossier, tandis queshutil.move()permet de le renommer et/ou de le déplacer vers un autre dossier en une seule opération.
Le processus étape par étape
Avant de coder, il est essentiel de comprendre la logique du script :
Étape 1 : Lister les fichiers
1import os
2
3dossier = "photos_vacances"
4
5# Liste tous les éléments (fichiers ET dossiers) du répertoire
6fichiers = os.listdir(dossier)
7print(fichiers)
8# ['IMG_0001.jpg', 'IMG_0002.jpg', 'IMG_0003.png', ...]Étape 2 : Renommer selon une règle
1import os
2
3dossier = "photos_vacances"
4compteur = 1
5
6for nom_fichier in os.listdir(dossier):
7 # On ne traite que les fichiers .jpg
8 if nom_fichier.endswith(".jpg"):
9 ancien_chemin = os.path.join(dossier, nom_fichier)
10 nouveau_nom = f"Vacances_2024_{compteur:03d}.jpg"
11 nouveau_chemin = os.path.join(dossier, nouveau_nom)
12
13 os.rename(ancien_chemin, nouveau_chemin)
14 print(f"✅ {nom_fichier} → {nouveau_nom}")
15
16 compteur += 1⚠️ Attention :
os.rename()écrase silencieusement un fichier existant portant le même nom sans demander confirmation ! Vérifiez toujours que le nom de destination n'existe pas déjà, ou vous risquez de perdre des données.
Étape 3 : Déplacer les fichiers avec shutil
1import os
2import shutil
3
4dossier_source = "factures_brutes"
5dossier_destination = "factures_2024_01"
6
7# Créer le dossier de destination s'il n'existe pas
8os.makedirs(dossier_destination, exist_ok=True)
9
10for nom_fichier in os.listdir(dossier_source):
11 if nom_fichier.endswith(".pdf"):
12 chemin_source = os.path.join(dossier_source, nom_fichier)
13 chemin_destination = os.path.join(dossier_destination, nom_fichier)
14
15 shutil.move(chemin_source, chemin_destination)
16 print(f"📁 Déplacé : {nom_fichier}")Script complet : renommer ET déplacer
Voici un script combinant les deux opérations, avec gestion des erreurs :
1import os
2import shutil
3
4def organiser_fichiers(dossier_source, dossier_destination, prefixe):
5 """Renomme et déplace tous les fichiers .pdf d'un dossier."""
6
7 os.makedirs(dossier_destination, exist_ok=True)
8 compteur = 1
9
10 for nom_fichier in os.listdir(dossier_source):
11 chemin_complet = os.path.join(dossier_source, nom_fichier)
12
13 # On ignore les sous-dossiers
14 if not os.path.isfile(chemin_complet):
15 continue
16
17 if nom_fichier.lower().endswith(".pdf"):
18 extension = ".pdf"
19 nouveau_nom = f"{prefixe}_{compteur:03d}{extension}"
20 nouveau_chemin = os.path.join(dossier_destination, nouveau_nom)
21
22 try:
23 shutil.move(chemin_complet, nouveau_chemin)
24 print(f"✅ {nom_fichier} → {nouveau_nom}")
25 compteur += 1
26 except Exception as erreur:
27 print(f"❌ Erreur avec {nom_fichier} : {erreur}")
28
29# Utilisation
30organiser_fichiers("factures_brutes", "factures_2024_01", "Facture_2024")Simulateur de renommage
Testez comment un nom de fichier serait transformé par notre script (simulation, aucun vrai fichier n'est modifié).
Répartir par date avec pathlib (bonus moderne)
1from pathlib import Path
2import shutil
3from datetime import datetime
4
5dossier = Path("photos_vacances")
6
7for fichier in dossier.glob("*.jpg"):
8 # Récupère la date de modification du fichier
9 date_modif = datetime.fromtimestamp(fichier.stat().st_mtime)
10 nom_mois = date_modif.strftime("%Y-%m")
11
12 dossier_mois = dossier / nom_mois
13 dossier_mois.mkdir(exist_ok=True)
14
15 shutil.move(str(fichier), str(dossier_mois / fichier.name))Le saviez-vous ?
Le module 'shutil' tire son nom de 'shell utilities' (utilitaires de shell). Il a été conçu pour reproduire en Python les commandes que l'on utiliserait normalement dans un terminal, comme 'mv' ou 'cp' sous Linux/Mac !
— Documentation officielle Python - shutil
Bonnes pratiques à respecter
🎯 En pratique : Avant de lancer un script sur vos vrais fichiers, testez-le d'abord avec
print()au lieu deos.rename()/shutil.move(). Cela vous permet de vérifier que la logique de renommage est correcte sans risquer de fichiers perdus.
Voici un récapitulatif des précautions essentielles :
| Précaution | Pourquoi ? |
|---|---|
| Faire une copie de sauvegarde avant | Un bug peut renommer/écraser des fichiers irrécupérables |
| Tester sur un petit échantillon | Détecter les erreurs avant traitement massif |
| Vérifier l'existence du fichier destination | Éviter d'écraser accidentellement un fichier |
Utiliser try/except | Gérer proprement les erreurs (fichier verrouillé, permissions...) |
Journaliser les actions (print ou fichier log) | Garder une trace de ce qui a été fait |
Points clés
💡 À retenir : La combinaison
os.listdir()pour lister, une boucleforpour parcourir, etshutil.move()pour agir constitue le squelette de 90% des scripts d'automatisation de fichiers.
⚠️ Attention : Les chemins de fichiers diffèrent entre Windows (
\) et Mac/Linux (/). Utilisez toujoursos.path.join()oupathlib.Pathpour que votre script fonctionne sur tous les systèmes d'exploitation.
Quelle fonction permet de déplacer un fichier vers un autre dossier en Python ?
- 1Les modules os et shutil permettent respectivement de lister/renommer des fichiers et de les déplacer entre dossiers.
- 2Un script de renommage en masse suit une logique simple : lister les fichiers, appliquer une règle de nommage, puis déplacer ou renommer chaque fichier avec gestion des erreurs.
- 3Toujours tester son script avec des print() ou sur un échantillon avant de l'exécuter sur l'ensemble des fichiers, pour éviter toute perte de données irréversible.