- À propos du module shutil
- Importer le module shutil
- Copier un fichier avec shutil.copy()
- Copier un fichier dans un dossier
- Copier un fichier avec shutil.copy2()
- Copier le contenu d'un fichier avec copyfile()
- Copier un dossier complet avec copytree()
- Copier dans un dossier qui existe déjà
- Déplacer un fichier avec shutil.move()
- Renommer un fichier avec shutil.move()
- Déplacer un dossier
- Supprimer un dossier avec shutil.rmtree()
- Vérifier l'existence d'un dossier avant de le supprimer
- Créer une archive ZIP
- Extraire une archive
- Connaître les formats d'archives disponibles
- Connaître l'espace disponible sur un disque
- Afficher l'espace disque en Go
- Rechercher un programme avec shutil.which()
- Ignorer certains fichiers pendant une copie
- Créer une sauvegarde ZIP d'un projet
- Gérer les erreurs
- Principales fonctions du module shutil
Le module shutil fait partie de la bibliothèque standard de Python. Il fournit des fonctions permettant de copier, déplacer, supprimer et archiver facilement des fichiers et des dossiers.
1. À propos du module shutil
Le module shutil, dont le nom vient de shell utilities, propose des opérations de haut niveau pour manipuler les fichiers et les dossiers.
Il permet notamment de copier des fichiers, copier des dossiers complets, déplacer ou renommer des fichiers, supprimer des dossiers, créer des archives ZIP, extraire des archives et obtenir des informations sur l'espace disque.
shutil appartient à la bibliothèque standard de Python. Il n'est donc pas nécessaire de l'installer avec pip.
2. Importer le module shutil
Pour utiliser les fonctions du module shutil, il suffit de l'importer avec l'instruction import.
1 2 | import shutil print("Module shutil importé") |
Sortie :
1 | Module shutil importé |
3. Copier un fichier avec shutil.copy()
La fonction shutil.copy() permet de copier un fichier vers un autre emplacement. Le premier argument représente le fichier source et le second représente la destination.
1 2 3 | import shutil shutil.copy("document.txt", "copie.txt") print("Fichier copié") |
Sortie :
1 | Fichier copié |
Le fichier document.txt est copié dans un nouveau fichier nommé copie.txt.
4. Copier un fichier dans un dossier
La destination de shutil.copy() peut être un dossier existant. Dans ce cas, le fichier conserve automatiquement son nom d'origine.
1 2 3 | import shutil shutil.copy("document.txt", "sauvegarde") print("Fichier copié dans le dossier sauvegarde") |
Sortie :
1 | Fichier copié dans le dossier sauvegarde |
Si le dossier sauvegarde existe, le fichier sera copié à l'intérieur sous le nom document.txt.
5. Copier un fichier avec shutil.copy2()
La fonction shutil.copy2() fonctionne comme copy(), mais essaie également de conserver certaines métadonnées du fichier, notamment les dates de modification et d'accès.
1 2 3 | import shutil shutil.copy2("document.txt", "copie_document.txt") print("Fichier et métadonnées copiés") |
Sortie :
1 | Fichier et métadonnées copiés |
copy2() est particulièrement utile pour réaliser des opérations de sauvegarde.
6. Copier le contenu d'un fichier avec copyfile()
La fonction shutil.copyfile() permet de copier le contenu d'un fichier vers un autre fichier. La destination doit représenter un fichier et non simplement un dossier.
1 2 3 | import shutil shutil.copyfile("source.txt", "destination.txt") print("Contenu copié") |
Sortie :
1 | Contenu copié |
Après l'exécution, destination.txt contient les mêmes données que source.txt.
7. Copier un dossier complet avec copytree()
Pour copier un dossier avec l'ensemble de ses fichiers et sous-dossiers, nous utilisons la fonction shutil.copytree().
1 2 3 | import shutil shutil.copytree("mon_dossier", "copie_dossier") print("Dossier copié") |
Sortie :
1 | Dossier copié |
Python crée le dossier copie_dossier et y copie récursivement tout le contenu de mon_dossier.
8. Copier dans un dossier qui existe déjà
Le paramètre dirs_exist_ok=True permet à copytree() de copier les fichiers lorsque le dossier de destination existe déjà.
1 2 3 | import shutil shutil.copytree("mon_dossier", "sauvegarde", dirs_exist_ok=True) print("Copie terminée") |
Sortie :
1 | Copie terminée |
Cette possibilité est particulièrement pratique pour mettre à jour un dossier de sauvegarde existant.
9. Déplacer un fichier avec shutil.move()
La fonction shutil.move() permet de déplacer un fichier d'un emplacement vers un autre.
1 2 3 | import shutil shutil.move("document.txt", "documents/document.txt") print("Fichier déplacé") |
Sortie :
1 | Fichier déplacé |
Le fichier document.txt est retiré de son emplacement initial puis placé dans le dossier documents.
10. Renommer un fichier avec shutil.move()
La fonction shutil.move() peut également servir à renommer un fichier en indiquant un nouveau nom comme destination.
1 2 3 | import shutil shutil.move("ancien.txt", "nouveau.txt") print("Fichier renommé") |
Sortie :
1 | Fichier renommé |
Le fichier ancien.txt porte maintenant le nom nouveau.txt.
11. Déplacer un dossier
shutil.move() fonctionne également avec les dossiers. Il est ainsi possible de déplacer un dossier complet et tout son contenu.
1 2 3 | import shutil shutil.move("photos", "sauvegarde/photos") print("Dossier déplacé") |
Sortie :
1 | Dossier déplacé |
Le dossier photos et son contenu sont déplacés vers le dossier sauvegarde.
12. Supprimer un dossier avec shutil.rmtree()
La fonction shutil.rmtree() permet de supprimer un dossier ainsi que tous les fichiers et sous-dossiers qu'il contient.
1 2 3 | import shutil shutil.rmtree("ancien_dossier") print("Dossier supprimé") |
Sortie :
1 | Dossier supprimé |
Cette fonction doit être utilisée avec prudence. rmtree() supprime récursivement le contenu du dossier et ne l'envoie généralement pas dans la corbeille.
13. Vérifier l'existence d'un dossier avant de le supprimer
Avant d'utiliser shutil.rmtree(), il est souvent préférable de vérifier que le dossier existe. Nous pouvons utiliser pour cela la fonction os.path.exists().
1 2 3 4 5 6 7 8 | import os import shutil dossier = "ancien_dossier" if os.path.exists(dossier): shutil.rmtree(dossier) print("Dossier supprimé") else: print("Le dossier n'existe pas") |
Sortie possible :
1 | Dossier supprimé |
Cette vérification évite notamment de tenter de supprimer un dossier qui n'existe pas.
14. Créer une archive ZIP
La fonction shutil.make_archive() permet de créer facilement une archive à partir d'un dossier. Pour obtenir une archive ZIP, nous indiquons "zip" comme format.
1 2 3 | import shutil shutil.make_archive("sauvegarde", "zip", "mon_dossier") print("Archive créée") |
Sortie :
1 | Archive créée |
Cette commande crée le fichier sauvegarde.zip contenant les éléments du dossier mon_dossier.
15. Extraire une archive
La fonction shutil.unpack_archive() permet d'extraire le contenu d'une archive dans un dossier donné.
1 2 3 | import shutil shutil.unpack_archive("sauvegarde.zip", "fichiers_extraits") print("Archive extraite") |
Sortie :
1 | Archive extraite |
Le contenu de sauvegarde.zip est extrait dans le dossier fichiers_extraits.
16. Connaître les formats d'archives disponibles
La fonction shutil.get_archive_formats() permet d'obtenir la liste des formats disponibles pour la création d'archives.
1 2 3 4 | import shutil formats = shutil.get_archive_formats() for format_archive in formats: print(format_archive) |
Sortie possible :
1 2 3 4 5 | ('bztar', "bzip2'ed tar-file") ('gztar', "gzip'ed tar-file") ('tar', 'uncompressed tar file') ('xztar', "xz'ed tar-file") ('zip', 'ZIP file') |
Les formats réellement disponibles peuvent varier selon la version de Python et l'environnement utilisé.
17. Connaître l'espace disponible sur un disque
La fonction shutil.disk_usage() retourne trois informations : l'espace total, l'espace utilisé et l'espace libre.
1 2 3 4 5 | import shutil total, utilise, libre = shutil.disk_usage(".") print("Total :", total) print("Utilisé :", utilise) print("Libre :", libre) |
Sortie possible :
1 2 3 | Total : 510541807616 Utilisé : 210325118976 Libre : 300216688640 |
Les valeurs retournées par disk_usage() sont exprimées en octets.
18. Afficher l'espace disque en Go
Pour rendre les informations plus lisibles, nous pouvons convertir les octets en gigaoctets en divisant les valeurs par 1024**3.
1 2 3 4 5 | import shutil total, utilise, libre = shutil.disk_usage(".") print("Total :", round(total / 1024**3, 2), "Go") print("Utilisé :", round(utilise / 1024**3, 2), "Go") print("Libre :", round(libre / 1024**3, 2), "Go") |
Sortie possible :
1 2 3 | Total : 475.48 Go Utilisé : 195.88 Go Libre : 279.60 Go |
Les valeurs obtenues dépendent naturellement du disque utilisé sur l'ordinateur.
19. Rechercher un programme avec shutil.which()
La fonction shutil.which() recherche l'emplacement d'un programme exécutable accessible notamment à travers la variable d'environnement PATH.
1 2 3 | import shutil python = shutil.which("python") print(python) |
Sortie possible sous Windows :
1 | C:\Users\dell\AppData\Local\Programs\Python\Python313\python.EXE |
Le chemin dépend de l'installation de Python. Si le programme n'est pas trouvé, which() retourne None.
20. Ignorer certains fichiers pendant une copie
La fonction shutil.ignore_patterns() peut être utilisée avec copytree() pour exclure certains fichiers ou dossiers pendant une copie.
1 2 3 | import shutil shutil.copytree("projet", "copie_projet", ignore=shutil.ignore_patterns("*.tmp", "*.log")) print("Projet copié") |
Sortie :
1 | Projet copié |
Les fichiers ayant les extensions .tmp et .log ne seront pas copiés dans le nouveau dossier.
21. Créer une sauvegarde ZIP d'un projet
Une utilisation courante de shutil consiste à créer automatiquement une sauvegarde compressée d'un projet. Nous pouvons réaliser cette opération avec make_archive().
1 2 3 4 5 6 | import shutil dossier = "mon_projet" archive = "backup_mon_projet" shutil.make_archive(archive, "zip", dossier) print("Sauvegarde terminée") print("Archive :", archive + ".zip") |
Sortie :
1 2 | Sauvegarde terminée Archive : backup_mon_projet.zip |
Le dossier mon_projet est ainsi sauvegardé dans le fichier backup_mon_projet.zip.
22. Gérer les erreurs
Une opération sur un fichier peut échouer si le fichier n'existe pas ou si l'utilisateur ne possède pas les autorisations nécessaires. Nous pouvons utiliser try et except pour gérer ces situations.
1 2 3 4 5 6 7 8 | import shutil try: shutil.copy("document.txt", "backup/document.txt") print("Copie réussie") except FileNotFoundError: print("Fichier ou dossier introuvable") except PermissionError: print("Permission refusée") |
Sortie possible :
1 | Copie réussie |
La gestion des exceptions permet d'éviter l'arrêt brutal du programme lorsqu'une opération sur les fichiers échoue.
23. Principales fonctions du module shutil
Le module Python shutil est doté de nombreuses fonctions offrant à l'utilisateur une grande souplesse sur la manipulation des fichiers. Voici les principales foncnions publiques, regroupées par usage.
- shutil.copyfile(src, dst) : Copie le contenu du fichier source src vers le fichier de destination dst.
- shutil.copy(src, dst) : Copie un fichier vers une destination en conservant également ses permissions.
- shutil.copy2(src, dst) : Copie un fichier en essayant de conserver ses permissions et ses principales métadonnées.
- shutil.copyfileobj(fsrc, fdst) : Copie les données entre deux objets fichiers déjà ouverts en Python.
- shutil.copymode(src, dst) : Copie les permissions du fichier source vers le fichier de destination.
- shutil.copystat(src, dst) : Copie les principales métadonnées d'un fichier, comme les permissions et les dates.
- shutil.copytree(src, dst) : Copie récursivement un dossier complet avec ses fichiers et ses sous-dossiers.
- shutil.move(src, dst) : Déplace un fichier ou un dossier vers un autre emplacement et peut également servir à le renommer.
- shutil.rmtree(path) : Supprime récursivement un dossier ainsi que tous les fichiers et sous-dossiers qu'il contient.
- shutil.disk_usage(path) : Retourne l'espace disque total, l'espace utilisé et l'espace encore disponible.
- shutil.chown(path, user, group) : Modifie le propriétaire et/ou le groupe associé à un fichier ou à un dossier.
- shutil.which(cmd) : Recherche l'emplacement d'une commande ou d'un programme exécutable accessible depuis le système.
- shutil.make_archive() : Crée une archive à partir d'un dossier dans un format comme ZIP, TAR ou GZIP.
- shutil.unpack_archive() : Extrait automatiquement le contenu d'une archive vers le dossier de destination indiqué.
- shutil.get_archive_formats() : Retourne la liste des formats disponibles pour créer des archives avec shutil.
- shutil.get_unpack_formats() : Retourne la liste des formats d'archives que shutil est capable d'extraire.
- shutil.register_archive_format() : Enregistre un nouveau format personnalisé pouvant être utilisé pour créer des archives.
- shutil.unregister_archive_format() : Supprime un format de création d'archive précédemment enregistré.
- shutil.register_unpack_format() : Enregistre un nouveau format personnalisé permettant l'extraction d'archives.
- shutil.unregister_unpack_format() : Supprime un format d'extraction d'archive précédemment enregistré.
- shutil.ignore_patterns() : Définit des motifs de fichiers ou dossiers à ignorer lors d'une copie avec copytree().
- shutil.get_terminal_size() : Retourne la taille actuelle du terminal sous forme de nombre de colonnes et de lignes.
Voir Aussi:
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/



