Parcourir les fichiers et dossiers avec pathlib en Python

1. À propos du parcours des fichiers et dossiers avec pathlib

Le module pathlib fournit une approche orientée objet pour manipuler les fichiers, les dossiers et leurs chemins. La classe Path possède plusieurs méthodes permettant de parcourir facilement le contenu d'un dossier.

Les principales méthodes utilisées pour effectuer ces opérations sont iterdir(), glob() et rglob(). Elles permettent respectivement de parcourir directement un dossier, de rechercher des éléments selon un motif et d'effectuer une recherche récursive.

Dans les exemples suivants, nous supposons que le dossier documents contient plusieurs fichiers et sous-dossiers. Le programme suivant crée simplement un objet Path représentant ce dossier.

Sortie :

2. Parcourir un dossier avec Path.iterdir()

La méthode Path.iterdir() permet de parcourir les éléments directement contenus dans un dossier. Chaque élément obtenu est lui-même un objet Path.

Supposons que le dossier documents contienne les fichiers cours.txt et notes.pdf, ainsi que les dossiers python et images. Le programme suivant affiche tous ces éléments.

Sortie possible :

La méthode iterdir() ne parcourt que le niveau directement contenu dans le dossier. Elle ne descend pas automatiquement dans les sous-dossiers.

3. Afficher uniquement les fichiers

La méthode is_file() permet de déterminer si un objet Path représente un fichier. Nous pouvons donc la combiner avec iterdir() afin d'afficher uniquement les fichiers contenus directement dans un dossier.

Le programme suivant ignore les sous-dossiers et affiche uniquement les fichiers du dossier documents.

Sortie possible :

Si nous souhaitons afficher uniquement le nom du fichier sans le chemin qui le précède, nous pouvons utiliser la propriété name.

Sortie possible :

4. Afficher uniquement les dossiers

La méthode is_dir() permet de vérifier si un objet Path représente un dossier. Elle peut être utilisée avec iterdir() pour sélectionner uniquement les sous-dossiers.

Le programme suivant affiche uniquement les dossiers directement contenus dans documents.

Sortie possible :

Pour afficher uniquement leur nom, il suffit d'utiliser la propriété name.

Sortie possible :

5. Rechercher des fichiers avec Path.glob()

La méthode Path.glob() permet de rechercher des fichiers et des dossiers à l'aide d'un motif. Le caractère * représente une suite quelconque de caractères dans un nom.

Le motif * permet par exemple de sélectionner tous les éléments directement contenus dans un dossier.

Sortie possible :

Nous pouvons également rechercher les éléments dont le nom commence par une chaîne particulière. Le programme suivant recherche les éléments dont le nom commence par cours.

Sortie possible :

6. Filtrer les fichiers selon leur extension

L'une des utilisations les plus pratiques de glob() consiste à sélectionner les fichiers selon leur extension. Le motif *.txt permet par exemple de sélectionner les éléments dont le nom se termine par .txt.

Le programme suivant affiche les fichiers TXT directement contenus dans le dossier documents.

Sortie possible :

De la même manière, nous pouvons rechercher uniquement les fichiers Python en utilisant le motif *.py.

Sortie possible :

7. Parcourir récursivement avec Path.rglob()

La méthode Path.rglob() permet d'effectuer une recherche récursive. Contrairement à iterdir(), elle peut donc rechercher des éléments dans le dossier de départ et dans ses sous-dossiers.

Le motif * permet de parcourir récursivement tous les éléments de l'arborescence située sous documents.

Sortie possible :

Nous pouvons associer rglob() à is_file() afin d'afficher uniquement les fichiers présents dans toute l'arborescence.

Sortie possible :

8. Parcourir récursivement avec glob()

La méthode glob() peut également effectuer une recherche récursive grâce au motif **. Pour rechercher les fichiers dans tous les niveaux de sous-dossiers, nous pouvons par exemple utiliser **/*.py.

Le programme suivant recherche récursivement tous les fichiers possédant l'extension .py.

Sortie possible :

Pour ce type de recherche, rglob("*.py") constitue une écriture plus concise équivalente dans l'usage courant.

Sortie possible :

9. Afficher le nom et le chemin des éléments

Les objets Path retournés pendant le parcours possèdent toutes les propriétés de pathlib. Nous pouvons donc obtenir facilement le nom, le dossier parent, le suffixe ou le chemin complet de chaque fichier.

Le programme suivant affiche le nom, le dossier parent et l'extension de chaque fichier trouvé récursivement.

Sortie possible :

Pour obtenir un chemin absolu, nous pouvons utiliser la méthode resolve().

Sortie possible sous Windows :

10. Compter les fichiers et les dossiers

En parcourant une arborescence avec rglob(), nous pouvons utiliser is_file() et is_dir() pour compter séparément le nombre de fichiers et de dossiers.

Le programme suivant compte tous les fichiers et tous les sous-dossiers contenus dans documents.

Sortie possible :

Nous pouvons également compter uniquement les fichiers possédant une extension particulière. Le programme suivant compte les fichiers Python présents dans toute l'arborescence.

Sortie possible :

11. Rechercher un fichier dans une arborescence

La méthode rglob() permet de rechercher un fichier dans toute une arborescence en utilisant directement son nom comme motif. Cette technique est utile lorsque nous connaissons le nom du fichier mais pas son emplacement exact.

Le programme suivant recherche tous les fichiers nommés config.txt à partir du dossier projet.

Sortie possible :

Nous pouvons également rechercher les fichiers dont le nom respecte un motif. L'exemple suivant recherche récursivement tous les fichiers Python dont le nom commence par test_.

Sortie possible :

12. A retenir !

Le module pathlib fournit plusieurs méthodes pratiques pour parcourir les fichiers et les dossiers d'une arborescence.

  • iterdir() parcourt les éléments directement contenus dans un dossier.
  • is_file() permet de sélectionner uniquement les fichiers.
  • is_dir() permet de sélectionner uniquement les dossiers.
  • glob() recherche des éléments correspondant à un motif.
  • glob("*.txt") recherche les éléments TXT au niveau considéré.
  • rglob() effectue une recherche récursive.
  • rglob("*.py") recherche récursivement les fichiers Python.
  • glob("**/*.py") permet également une recherche récursive.
  • name permet d'obtenir le nom d'un élément.
  • parent permet d'obtenir son dossier parent.
  • suffix permet d'obtenir son extension.
  • resolve() permet d'obtenir un chemin absolu résolu.

Le programme suivant résume une utilisation courante de pathlib : parcourir récursivement un dossier et afficher uniquement les fichiers Python.

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 *