W3docs

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.")

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 send2trash
import 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éthodeCibleRépertoire non vide ?Notes
os.remove(path)Fichier uniqueClassique, largement pris en charge
Path.unlink(missing_ok=True)Fichier uniqueModerne, résistant aux conditions de course
os.rmdir(path)Répertoire videNonLève OSError si non vide
Path.rmdir()Répertoire videNonÉquivalent pathlib
shutil.rmtree(path)Arborescence de répertoiresOuiPermanent — à utiliser avec précaution
send2trash.send2trash(path)Fichier ou dossierOuiRé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() ou Path.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 FileNotFoundError et PermissionError pour rendre les scripts robustes.
  • Préférez send2trash lorsqu'une suppression réversible est importante.

Chapitres connexes

Was this page helpful?