- À propos du parcours des fichiers et dossiers avec pathlib
- Parcourir un dossier avec Path.iterdir()
- Afficher uniquement les fichiers
- Afficher uniquement les dossiers
- Rechercher des fichiers avec Path.glob()
- Filtrer les fichiers selon leur extension
- Parcourir récursivement avec Path.rglob()
- Parcourir récursivement avec glob()
- Afficher le nom et le chemin des éléments
- Compter les fichiers et les dossiers
- Rechercher un fichier dans une arborescence
- A retenir !
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.
1 2 3 4 | from pathlib import Path dossier = Path("documents") print(dossier) |
Sortie :
1 | documents |
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.
1 2 3 4 5 6 | from pathlib import Path dossier = Path("documents") for element in dossier.iterdir(): print(element) |
Sortie possible :
1 2 3 4 | documents/cours.txt documents/notes.pdf documents/python documents/images |
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.
1 2 3 4 5 6 7 | from pathlib import Path dossier = Path("documents") for element in dossier.iterdir(): if element.is_file(): print(element) |
Sortie possible :
1 2 | documents/cours.txt documents/notes.pdf |
Si nous souhaitons afficher uniquement le nom du fichier sans le chemin qui le précède, nous pouvons utiliser la propriété name.
1 2 3 4 5 6 7 | from pathlib import Path dossier = Path("documents") for element in dossier.iterdir(): if element.is_file(): print(element.name) |
Sortie possible :
1 2 | cours.txt notes.pdf |
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.
1 2 3 4 5 6 7 | from pathlib import Path dossier = Path("documents") for element in dossier.iterdir(): if element.is_dir(): print(element) |
Sortie possible :
1 2 | documents/python documents/images |
Pour afficher uniquement leur nom, il suffit d'utiliser la propriété name.
1 2 3 4 5 6 7 | from pathlib import Path dossier = Path("documents") for element in dossier.iterdir(): if element.is_dir(): print(element.name) |
Sortie possible :
1 2 | python images |
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.
1 2 3 4 5 6 | from pathlib import Path dossier = Path("documents") for element in dossier.glob("*"): print(element) |
Sortie possible :
1 2 3 4 | documents/cours.txt documents/notes.pdf documents/python documents/images |
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.
1 2 3 4 5 6 | from pathlib import Path dossier = Path("documents") for element in dossier.glob("cours*"): print(element) |
Sortie possible :
1 2 | documents/cours.txt documents/cours_python.pdf |
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.
1 2 3 4 5 6 7 | from pathlib import Path dossier = Path("documents") for fichier in dossier.glob("*.txt"): if fichier.is_file(): print(fichier) |
Sortie possible :
1 2 | documents/cours.txt documents/exercices.txt |
De la même manière, nous pouvons rechercher uniquement les fichiers Python en utilisant le motif *.py.
1 2 3 4 5 6 7 | from pathlib import Path dossier = Path("python") for fichier in dossier.glob("*.py"): if fichier.is_file(): print(fichier.name) |
Sortie possible :
1 2 3 | main.py calcul.py fonctions.py |
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.
1 2 3 4 5 6 | from pathlib import Path dossier = Path("documents") for element in dossier.rglob("*"): print(element) |
Sortie possible :
1 2 3 4 5 6 | documents/cours.txt documents/python documents/images documents/python/listes.py documents/python/fonctions.py documents/images/logo.png |
Nous pouvons associer rglob() à is_file() afin d'afficher uniquement les fichiers présents dans toute l'arborescence.
1 2 3 4 5 6 7 | from pathlib import Path dossier = Path("documents") for element in dossier.rglob("*"): if element.is_file(): print(element) |
Sortie possible :
1 2 3 4 | documents/cours.txt documents/python/listes.py documents/python/fonctions.py documents/images/logo.png |
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.
1 2 3 4 5 6 | from pathlib import Path dossier = Path("projet") for fichier in dossier.glob("**/*.py"): print(fichier) |
Sortie possible :
1 2 3 4 | projet/main.py projet/src/calcul.py projet/src/outils/fichiers.py projet/tests/test_calcul.py |
Pour ce type de recherche, rglob("*.py") constitue une écriture plus concise équivalente dans l'usage courant.
1 2 3 4 5 6 | from pathlib import Path dossier = Path("projet") for fichier in dossier.rglob("*.py"): print(fichier) |
Sortie possible :
1 2 3 4 | projet/main.py projet/src/calcul.py projet/src/outils/fichiers.py projet/tests/test_calcul.py |
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.
1 2 3 4 5 6 7 8 9 | from pathlib import Path dossier = Path("documents") for fichier in dossier.rglob("*"): if fichier.is_file(): print("Nom :", fichier.name) print("Parent :", fichier.parent) print("Extension :", fichier.suffix) |
Sortie possible :
1 2 3 4 5 6 7 8 9 | Nom : cours.txt Parent : documents Extension : .txt Nom : listes.py Parent : documents/python Extension : .py Nom : logo.png Parent : documents/images Extension : .png |
Pour obtenir un chemin absolu, nous pouvons utiliser la méthode resolve().
1 2 3 4 5 6 | from pathlib import Path dossier = Path("documents") for fichier in dossier.rglob("*.txt"): print(fichier.resolve()) |
Sortie possible sous Windows :
1 2 | C:\Users\Utilisateur\Python\documents\cours.txt C:\Users\Utilisateur\Python\documents\exercices.txt |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from pathlib import Path dossier = Path("documents") nb_fichiers = 0 nb_dossiers = 0 for element in dossier.rglob("*"): if element.is_file(): nb_fichiers += 1 elif element.is_dir(): nb_dossiers += 1 print("Nombre de fichiers :", nb_fichiers) print("Nombre de dossiers :", nb_dossiers) |
Sortie possible :
1 2 | Nombre de fichiers : 8 Nombre de dossiers : 3 |
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.
1 2 3 4 5 6 7 8 9 10 | from pathlib import Path dossier = Path("projet") nombre = 0 for fichier in dossier.rglob("*.py"): if fichier.is_file(): nombre += 1 print("Nombre de fichiers Python :", nombre) |
Sortie possible :
1 | Nombre de fichiers Python : 6 |
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.
1 2 3 4 5 6 7 | from pathlib import Path dossier = Path("projet") for fichier in dossier.rglob("config.txt"): if fichier.is_file(): print("Fichier trouvé :", fichier) |
Sortie possible :
1 | Fichier trouvé : projet/config/config.txt |
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_.
1 2 3 4 5 6 7 | from pathlib import Path dossier = Path("projet") for fichier in dossier.rglob("test_*.py"): if fichier.is_file(): print(fichier) |
Sortie possible :
1 2 3 | projet/tests/test_calcul.py projet/tests/test_fichiers.py projet/tests/test_utilisateur.py |
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.
1 2 3 4 5 6 7 8 | from pathlib import Path dossier = Path("projet") for fichier in dossier.rglob("*.py"): if fichier.is_file(): print("Nom :", fichier.name) print("Chemin :", fichier) |
Sortie possible :
1 2 3 4 5 6 | Nom : main.py Chemin : projet/main.py Nom : calcul.py Chemin : projet/src/calcul.py Nom : test_calcul.py Chemin : projet/tests/test_calcul.py |
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/


