Supprimer des fichiers et des répertoires en Python
Apprenez à supprimer des fichiers et des répertoires en Python avec os.remove, pathlib.Path.unlink, os.rmdir et shutil.rmtree avec une gestion sûre des erreurs.
Ce chapitre couvre toutes les méthodes standard pour supprimer des fichiers et des répertoires en Python — du module classique os à l'API moderne pathlib et au module shutil pour les répertoires non vides. Vous apprendrez également des modèles sûrs de gestion des erreurs afin que votre code se dégrade gracieusement lorsqu'un fichier a déjà été supprimé ou qu'une permission est refusée.
Supprimer un seul fichier
Utiliser os.remove()
Le module os fait partie de la bibliothèque standard de Python et fournit une interface portable aux fonctions du système d'exploitation. os.remove() supprime un seul fichier. Il lève FileNotFoundError si le chemin n'existe pas et PermissionError si le processus ne dispose pas des autorisations requises.
Supprimer un fichier avec os.remove()
import os
os.remove("report.txt")Encapsulez l'appel dans un bloc try/except pour que votre programme gère les fichiers manquants sans erreur :
Supprimer un fichier avec gestion des erreurs
import os
try:
os.remove("report.txt")
print("File deleted.")
except FileNotFoundError:
print("File not found — nothing to delete.")
except PermissionError:
print("Permission denied.")Utiliser pathlib.Path.unlink() (Python 3.4+)
pathlib fournit une interface orientée objet pour les chemins du système de fichiers. Path.unlink() supprime le fichier vers lequel pointe le chemin. Depuis Python 3.8, vous pouvez passer missing_ok=True pour supprimer automatiquement FileNotFoundError.
Supprimer un fichier avec pathlib
from pathlib import Path
# Raises FileNotFoundError if the file does not exist
Path("report.txt").unlink()Supprimer un fichier silencieusement s'il n'existe pas (Python 3.8+)
from pathlib import Path
Path("report.txt").unlink(missing_ok=True)
print("Done — file deleted or was already absent.")missing_ok=True est l'alternative idiomatique Python 3.8+ au modèle vérification-puis-suppression. Préférez-le aux vérifications os.path.exists() car il évite une condition de course : un autre processus pourrait supprimer le fichier entre votre vérification et votre appel de suppression.
Vérifier l'existence avant de supprimer (modèle classique)
Avant l'ajout de missing_ok, l'approche standard consistait à utiliser une protection os.path.exists() :
Vérifier l'existence avant de supprimer
import os
if os.path.exists("report.txt"):
os.remove("report.txt")
else:
print("File not found.")Cela fonctionne bien pour les scripts où les conditions de course ne sont pas une préoccupation, mais missing_ok=True est plus élégant dans le nouveau code.
Supprimer un répertoire vide
os.rmdir() supprime un répertoire, mais uniquement s'il est vide. Il lève OSError si le répertoire contient des fichiers ou des sous-répertoires.
Supprimer un répertoire vide
import os
try:
os.rmdir("empty_folder")
print("Directory removed.")
except FileNotFoundError:
print("Directory not found.")
except OSError:
print("Directory is not empty or cannot be removed.")Avec pathlib, utilisez Path.rmdir() :
from pathlib import Path
Path("empty_folder").rmdir()Supprimer un répertoire non vide
Pour supprimer un répertoire et tout ce qu'il contient (fichiers, sous-répertoires et leur contenu), utilisez shutil.rmtree(). C'est l'équivalent de rm -rf sous Unix — c'est permanent et irréversible.
Supprimer une arborescence de répertoires
import shutil
shutil.rmtree("old_project")
print("Directory and all its contents deleted.")Ajoutez une gestion des erreurs pour les modes d'échec courants :
Supprimer une arborescence de répertoires en toute sécurité
import shutil
try:
shutil.rmtree("old_project")
print("Deleted successfully.")
except FileNotFoundError:
print("Directory not found.")
except PermissionError:
print("Permission denied.")Le paramètre ignore_errors
Passez ignore_errors=True pour supprimer toutes les erreurs silencieusement. Utilisez ceci uniquement lorsque vous ne vous souciez vraiment pas de savoir si la suppression a réussi :
import shutil
shutil.rmtree("old_project", ignore_errors=True)Supprimer plusieurs fichiers correspondant à un modèle
Pour supprimer tous les fichiers correspondant à un modèle glob, combinez pathlib.Path.glob() avec unlink() :
Supprimer tous les fichiers .log dans un répertoire
from pathlib import Path
deleted = 0
for log_file in Path(".").glob("*.log"):
log_file.unlink()
deleted += 1
print(f"{deleted} log file(s) deleted.")Pour rechercher des sous-répertoires de manière récursive, utilisez rglob() :
Supprimer tous les fichiers .tmp dans une arborescence de répertoires
from pathlib import Path
for tmp_file in Path(".").rglob("*.tmp"):
tmp_file.unlink(missing_ok=True)L'équivalent avec le module os utilise os.listdir() et os.remove() :
Supprimer tous les fichiers .txt avec os
import os
directory = "."
for filename in os.listdir(directory):
if filename.endswith(".txt"):
os.remove(os.path.join(directory, filename))Vérifiez toujours quels fichiers correspondent avant d'effectuer une suppression en masse. Un passage rapide avec print() avant la boucle de suppression est une bonne habitude.
Envoyer des fichiers vers la corbeille (suppression réversible)
os.remove() et Path.unlink() suppriment les fichiers définitivement — il n'y a pas d'annulation possible. Si vous avez besoin d'une suppression récupérable (envoi d'un fichier vers la corbeille système), installez le package tiers send2trash :
pip install send2trashimport send2trash
send2trash.send2trash("report.txt")
print("File moved to Trash.")Ceci est utile dans les outils de bureau ou les scripts où une suppression accidentelle serait catastrophique.
Comparaison des méthodes de suppression
| Méthode | Cible | Répertoire non vide ? | Notes |
|---|---|---|---|
os.remove(path) | Fichier unique | — | Classique, largement pris en charge |
Path.unlink(missing_ok=True) | Fichier unique | — | Moderne, résistant aux conditions de course |
os.rmdir(path) | Répertoire vide | Non | Lève OSError si non vide |
Path.rmdir() | Répertoire vide | Non | Équivalent pathlib |
shutil.rmtree(path) | Arborescence de répertoires | Oui | Permanent — à utiliser avec précaution |
send2trash.send2trash(path) | Fichier ou dossier | Oui | Récupérable ; nécessite une installation |
Points clés à retenir
- Utilisez
Path.unlink(missing_ok=True)pour la suppression d'un seul fichier en Python moderne (3.8+). - Utilisez
os.rmdir()ouPath.rmdir()uniquement pour les répertoires vides. - Utilisez
shutil.rmtree()pour supprimer un répertoire et tout son contenu — vérifiez d'abord le chemin. - Gérez toujours
FileNotFoundErroretPermissionErrorpour rendre les scripts robustes. - Préférez
send2trashlorsqu'une suppression réversible est importante.
Chapitres connexes
- Gestion des fichiers Python — ouverture, modes et l'instruction
with - Lire des fichiers Python — lire des données depuis des fichiers
- Écrire / Créer des fichiers Python — écrire et créer des fichiers
- Python Try Except — gérer les exceptions de manière robuste