Le module shutil fournit la fonction shutil.move() permettant de déplacer des fichiers et des dossiers en Python. Cette même fonction peut également être utilisée pour renommer un fichier ou un dossier. Elle constitue ainsi une solution simple pour organiser automatiquement les fichiers d'un projet.
1. À propos de shutil.move()
La fonction shutil.move() appartient au module shutil de la bibliothèque standard de Python. Elle permet de déplacer un fichier ou un dossier depuis un emplacement source vers un emplacement de destination. Il n'est donc pas nécessaire d'installer un module supplémentaire avec pip.
Syntaxe de shutil.move()
La fonction reçoit principalement deux arguments : src représente le chemin de l'élément source et dst représente sa destination. Elle retourne le chemin de destination effectivement utilisé.
1 | shutil.move(src, dst) |
Sortie :
1 | Chemin de destination de l'élément déplacé |
Pour utiliser move(), nous devons commencer par importer le module shutil. L'exemple suivant vérifie simplement que le module est disponible.
1 2 | import shutil print("Module shutil chargé") |
Sortie :
1 | Module shutil chargé |
2. Déplacer un fichier
L'utilisation la plus courante de shutil.move() consiste à déplacer un fichier d'un dossier vers un autre. Le dossier de destination doit normalement exister avant l'opération.
Déplacer un fichier vers un dossier
Supposons que le fichier document.txt se trouve dans le dossier courant et que nous souhaitions le déplacer vers un dossier nommé documents. Nous indiquons simplement ces deux chemins à move().
1 2 3 | import shutil shutil.move("document.txt", "documents/document.txt") print("Fichier déplacé") |
Sortie :
1 | Fichier déplacé |
Après l'exécution, document.txt n'est plus présent à son emplacement initial. Il se trouve maintenant dans le dossier documents.
Déplacer en indiquant seulement le dossier
Lorsque la destination est un dossier existant, nous pouvons directement fournir son chemin. Le fichier conserve alors son nom d'origine.
1 2 3 | import shutil shutil.move("photo.jpg", "images") print("Photo déplacée") |
Sortie :
1 | Photo déplacée |
Si images est un dossier existant, le fichier est déplacé vers images/photo.jpg.
Récupérer le chemin retourné
shutil.move() retourne le chemin correspondant à la destination du déplacement. Nous pouvons récupérer cette information dans une variable.
1 2 3 | import shutil destination = shutil.move("rapport.pdf", "documents") print("Destination :", destination) |
Sortie possible :
1 | Destination : documents/rapport.pdf |
Le chemin retourné peut ensuite être réutilisé par le programme pour effectuer d'autres opérations.
3. Renommer un fichier
La fonction shutil.move() peut également servir à renommer un fichier. Lorsque le chemin source et le chemin destination correspondent au même emplacement mais utilisent des noms différents, le fichier est simplement renommé.
Renommer simplement un fichier
Dans l'exemple suivant, le fichier ancien.txt est renommé en nouveau.txt.
1 2 3 | import shutil shutil.move("ancien.txt", "nouveau.txt") print("Fichier renommé") |
Sortie :
1 | Fichier renommé |
Après l'exécution, ancien.txt n'existe plus sous son ancien nom et le fichier porte désormais le nom nouveau.txt.
Renommer un fichier en conservant son extension
Lors du renommage, il est important de conserver une extension appropriée. L'exemple suivant transforme photo1.jpg en vacances.jpg.
1 2 3 | import shutil shutil.move("photo1.jpg", "vacances.jpg") print("Nouveau nom : vacances.jpg") |
Sortie :
1 | Nouveau nom : vacances.jpg |
shutil.move() ne convertit pas le format du fichier. Modifier uniquement l'extension ne transforme donc pas réellement une image JPEG en PNG, un document texte en PDF, etc.
4. Déplacer et renommer un fichier simultanément
L'un des avantages de shutil.move() est qu'il est possible de déplacer et renommer un fichier en une seule opération. Il suffit d'indiquer dans la destination le nouveau dossier ainsi que le nouveau nom.
Déplacer et changer le nom
Dans l'exemple suivant, rapport.txt est déplacé dans le dossier archives et renommé simultanément en rapport_2026.txt.
1 2 3 | import shutil shutil.move("rapport.txt", "archives/rapport_2026.txt") print("Fichier déplacé et renommé") |
Sortie :
1 | Fichier déplacé et renommé |
Cette technique évite d'effectuer séparément une opération de déplacement puis une opération de renommage.
Créer le dossier de destination avant le déplacement
Lorsque le dossier de destination n'existe pas, il est souvent préférable de le créer explicitement avant de déplacer le fichier. Nous pouvons utiliser os.makedirs() avec l'option exist_ok=True.
1 2 3 4 5 | import os import shutil os.makedirs("archives", exist_ok=True) shutil.move("rapport.txt", "archives/rapport_2026.txt") print("Déplacement terminé") |
Sortie :
1 | Déplacement terminé |
Cette méthode rend le programme plus robuste lorsque nous ne savons pas si le dossier archives existe déjà.
5. Déplacer et renommer des dossiers
shutil.move() ne fonctionne pas uniquement avec les fichiers. Elle peut également déplacer ou renommer des dossiers complets, y compris leur contenu et leurs sous-dossiers.
Déplacer un dossier
Supposons que nous souhaitions déplacer le dossier photos vers un dossier existant nommé sauvegarde. La même fonction peut être utilisée.
1 2 3 | import shutil shutil.move("photos", "sauvegarde") print("Dossier déplacé") |
Sortie :
1 | Dossier déplacé |
Le dossier photos, ses fichiers et ses éventuels sous-dossiers sont déplacés dans sauvegarde.
Renommer un dossier
Pour renommer un dossier sans changer son emplacement, il suffit d'indiquer son ancien nom puis son nouveau nom.
1 2 3 | import shutil shutil.move("ancien_projet", "nouveau_projet") print("Dossier renommé") |
Sortie :
1 | Dossier renommé |
Le dossier ancien_projet porte maintenant le nom nouveau_projet.
Déplacer et renommer un dossier
Comme pour un fichier, nous pouvons déplacer un dossier vers un nouvel emplacement tout en lui attribuant un nouveau nom.
1 2 3 | import shutil shutil.move("projet", "archives/projet_python") print("Dossier déplacé et renommé") |
Sortie :
1 | Dossier déplacé et renommé |
Le dossier projet est déplacé vers archives et porte désormais le nom projet_python.
6. Gérer les erreurs avec shutil.move()
Une opération avec shutil.move() peut échouer lorsque le fichier source n'existe pas, lorsque la destination pose un conflit ou lorsque Python ne possède pas les permissions nécessaires. Il est donc conseillé de prévoir une gestion des erreurs.
Vérifier que le fichier source existe
Avant de déplacer un fichier, nous pouvons utiliser os.path.exists() afin de vérifier son existence.
1 2 3 4 5 6 7 8 | import os import shutil source = "document.txt" if os.path.exists(source): shutil.move(source, "archives/document.txt") print("Fichier déplacé") else: print("Le fichier source n'existe pas") |
Sortie possible :
1 | Le fichier source n'existe pas |
Cette vérification permet d'éviter une tentative de déplacement lorsque le fichier source est absent.
Utiliser try et except
Pour gérer plusieurs catégories d'erreurs, nous pouvons utiliser les instructions try et except. Elles permettent d'afficher un message adapté sans interrompre brutalement le programme.
1 2 3 4 5 6 7 8 9 10 | import shutil try: shutil.move("document.txt", "archives/document.txt") print("Déplacement réussi") except FileNotFoundError: print("Fichier ou dossier introuvable") except PermissionError: print("Permission refusée") except shutil.Error as erreur: print("Erreur :", erreur) |
Sortie possible :
1 | Déplacement réussi |
FileNotFoundError correspond notamment à l'absence d'un chemin nécessaire, tandis que PermissionError indique un problème de droits d'accès. shutil.Error peut signaler d'autres problèmes liés à l'opération.
Attention aux fichiers déjà existants
Le comportement en présence d'un élément portant déjà le même nom dans la destination peut dépendre du système d'exploitation, du type de destination et de la situation. Pour éviter toute perte accidentelle de données, il est préférable de vérifier explicitement l'existence de la destination avant le déplacement.
1 2 3 4 5 6 7 8 9 | import os import shutil source = "document.txt" destination = "archives/document.txt" if os.path.exists(destination): print("La destination existe déjà") else: shutil.move(source, destination) print("Fichier déplacé") |
Sortie possible :
1 | La destination existe déjà |
Cette précaution est particulièrement importante dans les scripts qui manipulent automatiquement un grand nombre de fichiers.
7. Exemples pratiques et points importants
Organiser automatiquement des fichiers
shutil.move() peut servir à créer un petit programme d'organisation automatique des fichiers. L'exemple suivant déplace plusieurs fichiers PDF vers un dossier nommé PDF.
1 2 3 4 5 6 7 8 | import os import shutil os.makedirs("PDF", exist_ok=True) fichiers = ["cours.pdf", "exercice.pdf", "solution.pdf"] for fichier in fichiers: if os.path.exists(fichier): shutil.move(fichier, "PDF") print(fichier, "déplacé") |
Sortie possible :
1 2 3 | cours.pdf déplacé exercice.pdf déplacé solution.pdf déplacé |
Ce principe peut être étendu pour classer automatiquement les images, documents, archives ou autres types de fichiers selon leur extension.
Renommer plusieurs fichiers
Nous pouvons également utiliser shutil.move() dans une boucle pour renommer plusieurs fichiers. L'exemple suivant ajoute le préfixe backup_ aux noms de trois fichiers.
1 2 3 4 5 6 | import shutil fichiers = ["cours.txt", "exercice.txt", "solution.txt"] for fichier in fichiers: nouveau_nom = "backup_" + fichier shutil.move(fichier, nouveau_nom) print(fichier, "->", nouveau_nom) |
Sortie :
1 2 3 | cours.txt -> backup_cours.txt exercice.txt -> backup_exercice.txt solution.txt -> backup_solution.txt |
Cette méthode permet d'automatiser rapidement le renommage en série de nombreux fichiers.
Points importants à retenir
shutil.move() permet de déplacer un fichier d'un emplacement vers un autre.
La même fonction permet de renommer un fichier lorsque nous indiquons un nouveau nom comme destination.
shutil.move() peut déplacer et renommer simultanément un fichier en indiquant un nouveau dossier et un nouveau nom.
La fonction fonctionne également avec des dossiers complets et leurs sous-dossiers.
Lorsque la source et la destination se trouvent sur des systèmes de fichiers différents, l'opération peut nécessiter une copie suivie d'une suppression de la source plutôt qu'un simple renommage système.
Avant une opération importante, il est conseillé de vérifier l'existence de la source et de la destination afin d'éviter les erreurs et les remplacements involontaires.
Remarque Finale
La fonction shutil.move() constitue une solution simple et puissante pour déplacer et renommer des fichiers en Python. Elle peut manipuler aussi bien des fichiers individuels que des dossiers complets et permet de combiner déplacement et changement de nom en une seule opération.
Associée aux fonctions du module os ou du module pathlib, elle permet de développer facilement des scripts d'organisation de fichiers, de classement automatique, de sauvegarde ou de gestion de documents.
Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/


