Supprimer des fichiers et dossiers avec pathlib en Python

 

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.

Sortie :

 

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

Sortie :

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.

Sortie possible :

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.

Sortie possible :

 

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.

Sortie :

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.

Sortie :

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.

Sortie possible si le dossier n'est pas vide :

 

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.

Sortie possible :

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.

Sortie possible :

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.

Sortie possible :

 

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.

Sortie possible :

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.

Sortie possible :

Pour un dossier, nous pouvons également intercepter OSError, notamment lorsqu'il n'est pas vide.

Sortie possible :

 

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.

Sortie possible :

 

 


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/


Leave a Reply

Your email address will not be published. Required fields are marked *