- À propos de la suppression avec pathlib
- Supprimer un fichier avec Path.unlink()
- Vérifier l'existence avant de supprimer un fichier
- Supprimer un fichier avec missing_ok=True
- Supprimer un dossier vide avec Path.rmdir()
- Vérifier un dossier avant sa suppression
- Supprimer plusieurs fichiers
- Supprimer le contenu d'un dossier
- Gérer les erreurs de suppression
- A retenir !
1. À propos de la suppression avec pathlib
Le module pathlib permet de manipuler les fichiers, les dossiers et leurs chemins avec une approche orientée objet. La classe Path fournit notamment les méthodes unlink() et rmdir() pour supprimer des éléments du système de fichiers.
La méthode unlink() permet principalement de supprimer un fichier ou un lien symbolique, tandis que rmdir() permet de supprimer un dossier uniquement lorsqu'il est vide.
Le programme suivant crée deux objets Path représentant respectivement un fichier et un dossier.
1 2 3 4 5 6 7 | from pathlib import Path fichier = Path("cours.txt") dossier = Path("documents") print("Fichier :", fichier) print("Dossier :", dossier) |
Sortie :
1 2 | Fichier : cours.txt Dossier : documents |
2. Supprimer un fichier avec Path.unlink()
La méthode Path.unlink() permet de supprimer un fichier du système de fichiers. Elle s'applique directement à l'objet Path représentant le fichier à supprimer.
Supposons que le fichier cours.txt existe dans le dossier courant. Le programme suivant le supprime avec unlink().
1 2 3 4 5 6 | from pathlib import Path fichier = Path("cours.txt") fichier.unlink() print("Fichier supprimé.") |
Sortie :
1 | Fichier supprimé. |
Après l'exécution de unlink(), le fichier cours.txt n'existe plus dans son emplacement d'origine. Cette suppression est effectuée directement par le système de fichiers et ne correspond pas à un simple déplacement vers une corbeille gérée par Python.
3. Vérifier l'existence avant de supprimer un fichier
Si nous utilisons unlink() sur un fichier qui n'existe pas, Python déclenche normalement une exception FileNotFoundError. Nous pouvons utiliser exists() pour vérifier l'existence du chemin avant la suppression.
Le programme suivant supprime cours.txt uniquement si le chemin existe.
1 2 3 4 5 6 7 8 9 | from pathlib import Path fichier = Path("cours.txt") if fichier.exists(): fichier.unlink() print("Le fichier a été supprimé.") else: print("Le fichier n'existe pas.") |
Sortie possible :
1 | Le fichier a été supprimé. |
Pour nous assurer que le chemin correspond réellement à un fichier, nous pouvons utiliser is_file(). Cette vérification est généralement plus précise lorsque notre objectif est spécifiquement de supprimer un fichier ordinaire.
1 2 3 4 5 6 7 8 9 | from pathlib import Path fichier = Path("cours.txt") if fichier.is_file(): fichier.unlink() print("Fichier supprimé.") else: print("Le fichier est introuvable.") |
Sortie possible :
1 | Fichier supprimé. |
4. Supprimer un fichier avec missing_ok=True
Depuis Python 3.8, la méthode unlink() accepte le paramètre missing_ok. Avec missing_ok=True, aucune exception FileNotFoundError n'est déclenchée lorsque le chemin n'existe pas.
Le programme suivant tente de supprimer cours.txt. Si le fichier n'existe pas, le programme continue normalement.
1 2 3 4 5 6 | from pathlib import Path fichier = Path("cours.txt") fichier.unlink(missing_ok=True) print("Opération terminée.") |
Sortie :
1 | Opération terminée. |
Cette écriture est particulièrement pratique lorsque nous voulons simplement nous assurer qu'un fichier n'est plus présent, sans avoir besoin de distinguer le cas où il avait déjà été supprimé.
5. Supprimer un dossier vide avec Path.rmdir()
La méthode Path.rmdir() permet de supprimer un dossier vide. Contrairement à unlink(), elle est destinée aux répertoires.
Supposons que le dossier archives existe et soit vide. Le programme suivant permet de le supprimer.
1 2 3 4 5 6 | from pathlib import Path dossier = Path("archives") dossier.rmdir() print("Dossier supprimé.") |
Sortie :
1 | Dossier supprimé. |
Si le dossier contient encore des fichiers ou des sous-dossiers, rmdir() ne peut pas le supprimer et une exception OSError est normalement déclenchée.
1 2 3 4 | from pathlib import Path dossier = Path("documents") dossier.rmdir() |
Sortie possible si le dossier n'est pas vide :
1 | OSError: Directory not empty |
6. Vérifier un dossier avant sa suppression
La méthode is_dir() permet de vérifier qu'un chemin représente réellement un dossier avant d'utiliser rmdir(). Nous pouvons également vérifier si le dossier est vide avec iterdir().
Le programme suivant vérifie d'abord que archives est un dossier, puis vérifie qu'il ne contient aucun élément avant de le supprimer.
1 2 3 4 5 6 7 8 9 10 11 | from pathlib import Path dossier = Path("archives") if not dossier.is_dir(): print("Le dossier n'existe pas.") elif any(dossier.iterdir()): print("Le dossier n'est pas vide.") else: dossier.rmdir() print("Le dossier vide a été supprimé.") |
Sortie possible :
1 | Le dossier vide a été supprimé. |
La fonction any() retourne ici True dès qu'au moins un élément est trouvé dans le dossier. Elle permet donc de déterminer simplement si le dossier contient encore quelque chose.
7. Supprimer plusieurs fichiers
La méthode unlink() peut être combinée avec glob() afin de supprimer plusieurs fichiers correspondant à un motif. Cette technique permet par exemple de supprimer tous les fichiers possédant une extension donnée.
Le programme suivant supprime tous les fichiers .tmp directement contenus dans le dossier documents.
1 2 3 4 5 6 7 8 | from pathlib import Path dossier = Path("documents") for fichier in dossier.glob("*.tmp"): if fichier.is_file(): fichier.unlink() print("Supprimé :", fichier.name) |
Sortie possible :
1 2 3 | Supprimé : fichier1.tmp Supprimé : fichier2.tmp Supprimé : test.tmp |
Pour supprimer récursivement les fichiers correspondant à un motif dans une arborescence, nous pouvons utiliser rglob(). Le programme suivant supprime tous les fichiers .log trouvés dans projet et ses sous-dossiers.
1 2 3 4 5 6 7 8 | from pathlib import Path dossier = Path("projet") for fichier in dossier.rglob("*.log"): if fichier.is_file(): fichier.unlink() print("Supprimé :", fichier) |
Sortie possible :
1 2 3 | Supprimé : projet/application.log Supprimé : projet/logs/erreurs.log Supprimé : projet/tests/test.log |
8. Supprimer le contenu d'un dossier
pathlib ne fournit pas une méthode unique équivalente à une suppression récursive complète d'une arborescence non vide. Nous pouvons cependant parcourir les éléments avec iterdir(), supprimer les fichiers avec unlink() et supprimer récursivement les sous-dossiers avec une fonction.
Le programme suivant définit une fonction supprimer_dossier() qui supprime récursivement le contenu d'un dossier, puis le dossier lui-même. Cette opération est destructive et doit être utilisée avec prudence.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from pathlib import Path def supprimer_dossier(dossier): for element in dossier.iterdir(): if element.is_dir() and not element.is_symlink(): supprimer_dossier(element) else: element.unlink() dossier.rmdir() dossier = Path("archives") if dossier.is_dir(): supprimer_dossier(dossier) print("Dossier et contenu supprimés.") |
Sortie possible :
1 | Dossier et contenu supprimés. |
Pour supprimer directement une arborescence complète dans une application réelle, la fonction shutil.rmtree() du module shutil est généralement plus simple et plus appropriée.
9. Gérer les erreurs de suppression
Une suppression peut échouer pour plusieurs raisons : fichier inexistant, dossier non vide, permissions insuffisantes ou fichier actuellement inaccessible. Une structure try...except permet de gérer ces situations.
Le programme suivant gère plusieurs erreurs possibles lors de la suppression d'un fichier.
1 2 3 4 5 6 7 8 9 10 11 12 13 | from pathlib import Path fichier = Path("cours.txt") try: fichier.unlink() print("Fichier supprimé.") except FileNotFoundError: print("Le fichier n'existe pas.") except PermissionError: print("Permission refusée.") except OSError as erreur: print("Erreur système :", erreur) |
Sortie possible :
1 | Fichier supprimé. |
Pour un dossier, nous pouvons également intercepter OSError, notamment lorsqu'il n'est pas vide.
1 2 3 4 5 6 7 8 9 10 11 12 13 | from pathlib import Path dossier = Path("documents") try: dossier.rmdir() print("Dossier supprimé.") except FileNotFoundError: print("Le dossier n'existe pas.") except PermissionError: print("Permission refusée.") except OSError: print("Le dossier n'est pas vide ou ne peut pas être supprimé.") |
Sortie possible :
1 | Le dossier n'est pas vide ou ne peut pas être supprimé. |
10. A retenir !
La classe Path du module pathlib fournit plusieurs outils permettant de supprimer des fichiers et des dossiers en Python.
- unlink() permet de supprimer un fichier ou un lien.
- unlink(missing_ok=True) évite l'exception lorsque le chemin n'existe pas.
- rmdir() permet de supprimer un dossier vide.
- exists() permet de vérifier l'existence d'un chemin.
- is_file() permet de vérifier qu'un chemin représente un fichier.
- is_dir() permet de vérifier qu'un chemin représente un dossier.
- iterdir() permet de vérifier ou parcourir le contenu d'un dossier.
- glob() permet de sélectionner plusieurs fichiers selon un motif.
- rglob() permet de rechercher récursivement des fichiers.
- try...except permet de gérer les erreurs de suppression.
- rmdir() ne supprime pas directement un dossier non vide.
- shutil.rmtree() est généralement préférable lorsqu'il faut supprimer une arborescence complète non vide.
Le programme suivant résume une suppression simple et sécurisée : il vérifie si le chemin représente un fichier avant de le supprimer.
1 2 3 4 5 6 7 8 9 | from pathlib import Path fichier = Path("cours.txt") if fichier.is_file(): fichier.unlink() print("Le fichier a été supprimé.") else: print("Le fichier n'existe pas.") |
Sortie possible :
1 | Le fichier a été supprimé. |
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/


