- À propos de os.walk()
- Syntaxe et fonctionnement de os.walk()
- Parcourir récursivement un dossier
- Afficher uniquement les fichiers
- Afficher le chemin complet des fichiers
- Rechercher un fichier dans une arborescence
- Rechercher les fichiers selon leur extension
- Compter les fichiers et les dossiers
- Ignorer certains dossiers pendant le parcours
- Résumé
1. À propos de os.walk()
Lorsqu'un programme Python doit explorer le contenu d'un dossier et de tous ses sous-dossiers, il est possible d'utiliser la fonction os.walk() du module os. Cette fonction effectue automatiquement un parcours récursif de l'arborescence.
Contrairement à os.listdir(), qui affiche uniquement le contenu direct d'un dossier, os.walk() descend automatiquement dans les sous-dossiers et permet donc d'explorer toute une arborescence.
Pour utiliser os.walk(), nous devons commencer par importer le module os. Le programme suivant vérifie simplement que le module est chargé.
1 2 3 | import os print("Module os chargé.") |
Sortie :
1 | Module os chargé. |
2. Syntaxe et fonctionnement de os.walk()
La fonction os.walk() reçoit comme argument principal le chemin du dossier à parcourir. Elle produit successivement trois informations : le dossier courant, la liste de ses sous-dossiers et la liste de ses fichiers.
La forme la plus courante d'utilisation de os.walk() est la suivante.
1 2 3 4 | for dossier, sous_dossiers, fichiers in os.walk(chemin): print(dossier) print(sous_dossiers) print(fichiers) |
Sortie possible :
1 2 3 | documents ['python', 'images'] ['cours.txt', 'notes.pdf'] |
À chaque étape du parcours, la variable dossier contient le chemin du dossier actuellement visité, sous_dossiers contient les noms de ses sous-dossiers et fichiers contient les noms de ses fichiers.
3. Parcourir récursivement un dossier
Considérons un dossier documents contenant plusieurs fichiers et sous-dossiers. En utilisant os.walk() dans une boucle for, Python visite automatiquement chaque niveau de l'arborescence.
Le programme suivant affiche le dossier courant ainsi que les sous-dossiers et fichiers rencontrés pendant le parcours.
1 2 3 4 5 6 | import os for dossier, sous_dossiers, fichiers in os.walk("documents"): print("Dossier :", dossier) print("Sous-dossiers :", sous_dossiers) print("Fichiers :", fichiers) |
Sortie possible :
1 2 3 4 5 6 7 8 9 10 11 | Dossier : documents Sous-dossiers : ['python', 'images'] Fichiers : ['cours.txt'] Dossier : documents/python Sous-dossiers : [] Fichiers : ['listes.py', 'fichiers.py'] Dossier : documents/images Sous-dossiers : [] Fichiers : ['logo.png', 'photo.jpg'] |
Nous constatons que os.walk() commence par le dossier documents, puis descend automatiquement dans les dossiers python et images.
4. Afficher uniquement les fichiers
Dans de nombreux programmes, nous souhaitons uniquement récupérer les fichiers sans afficher les informations concernant les dossiers. Il suffit alors de parcourir la liste fichiers renvoyée à chaque étape par os.walk().
Le programme suivant affiche tous les noms de fichiers contenus dans documents et dans ses sous-dossiers.
1 2 3 4 5 | import os for dossier, sous_dossiers, fichiers in os.walk("documents"): for fichier in fichiers: print(fichier) |
Sortie possible :
1 2 3 4 5 | cours.txt listes.py fichiers.py logo.png photo.jpg |
Le parcours est récursif : les fichiers présents dans les sous-dossiers sont donc également affichés.
5. Afficher le chemin complet des fichiers
La liste fichiers contient uniquement les noms des fichiers. Pour obtenir leur chemin, nous pouvons combiner le dossier courant avec le nom du fichier en utilisant os.path.join().
Le programme suivant construit et affiche le chemin de chaque fichier rencontré pendant le parcours.
1 2 3 4 5 6 | import os for dossier, sous_dossiers, fichiers in os.walk("documents"): for fichier in fichiers: chemin = os.path.join(dossier, fichier) print(chemin) |
Sortie possible :
1 2 3 4 5 | documents/cours.txt documents/python/listes.py documents/python/fichiers.py documents/images/logo.png documents/images/photo.jpg |
L'utilisation de os.path.join() est préférable à une concaténation manuelle, car elle utilise automatiquement le séparateur de chemin adapté au système d'exploitation.
6. Rechercher un fichier dans une arborescence
La fonction os.walk() est particulièrement pratique pour rechercher un fichier lorsque nous ne connaissons pas précisément le sous-dossier dans lequel il se trouve.
Dans l'exemple suivant, nous recherchons le fichier fichiers.py dans toute l'arborescence du dossier documents. Lorsque le fichier est trouvé, son chemin est construit avec os.path.join().
1 2 3 4 5 6 7 8 | import os recherche = "fichiers.py" for dossier, sous_dossiers, fichiers in os.walk("documents"): if recherche in fichiers: chemin = os.path.join(dossier, recherche) print("Fichier trouvé :", chemin) |
Sortie possible :
1 | Fichier trouvé : documents/python/fichiers.py |
Cette méthode permet de rechercher automatiquement un fichier dans un dossier contenant un grand nombre de sous-dossiers.
7. Rechercher les fichiers selon leur extension
Nous pouvons également utiliser os.walk() pour sélectionner uniquement certains types de fichiers. La méthode endswith() permet par exemple de vérifier l'extension d'un fichier.
Le programme suivant recherche uniquement les fichiers dont le nom se termine par l'extension .py.
1 2 3 4 5 6 7 | import os for dossier, sous_dossiers, fichiers in os.walk("documents"): for fichier in fichiers: if fichier.endswith(".py"): chemin = os.path.join(dossier, fichier) print(chemin) |
Sortie possible :
1 2 | documents/python/listes.py documents/python/fichiers.py |
Nous pouvons facilement adapter cette technique pour rechercher des fichiers .txt, .pdf, .jpg, .html ou toute autre extension.
Pour rechercher plusieurs extensions simultanément, endswith() accepte également un tuple d'extensions. Le programme suivant sélectionne les images JPG et PNG.
1 2 3 4 5 6 | import os for dossier, sous_dossiers, fichiers in os.walk("documents"): for fichier in fichiers: if fichier.lower().endswith((".jpg", ".png")): print(os.path.join(dossier, fichier)) |
Sortie possible :
1 2 | documents/images/logo.png documents/images/photo.jpg |
8. Compter les fichiers et les dossiers
La fonction os.walk() peut être utilisée pour obtenir des statistiques sur une arborescence. Nous pouvons par exemple compter le nombre total de fichiers et de sous-dossiers.
À chaque étape, len(fichiers) donne le nombre de fichiers du dossier courant et len(sous_dossiers) donne son nombre de sous-dossiers.
1 2 3 4 5 6 7 8 9 10 11 | import os nb_fichiers = 0 nb_dossiers = 0 for dossier, sous_dossiers, fichiers in os.walk("documents"): nb_fichiers += len(fichiers) nb_dossiers += len(sous_dossiers) print("Nombre de fichiers :", nb_fichiers) print("Nombre de sous-dossiers :", nb_dossiers) |
Sortie possible :
1 2 | Nombre de fichiers : 5 Nombre de sous-dossiers : 2 |
Cette méthode permet d'obtenir rapidement des informations sur le contenu complet d'un dossier, même lorsque celui-ci possède plusieurs niveaux de sous-dossiers.
9. Ignorer certains dossiers pendant le parcours
Par défaut, os.walk() visite tous les sous-dossiers rencontrés. Lorsque le parcours s'effectue du haut vers le bas, nous pouvons modifier directement la liste sous_dossiers afin d'empêcher Python de visiter certains répertoires.
Le programme suivant ignore le dossier cache. L'instruction sous_dossiers.remove("cache") retire ce dossier de la liste des répertoires que os.walk() doit encore parcourir.
1 2 3 4 5 6 7 | import os for dossier, sous_dossiers, fichiers in os.walk("documents"): if "cache" in sous_dossiers: sous_dossiers.remove("cache") print("Dossier :", dossier) |
Sortie possible :
1 2 3 | Dossier : documents Dossier : documents/python Dossier : documents/images |
Le dossier documents/cache n'apparaît pas dans la sortie, car il a été retiré de la liste avant que os.walk() ne descende dans ce répertoire.
10. Résumé
La fonction os.walk() constitue un outil très pratique pour parcourir automatiquement une arborescence de dossiers en Python.
- os.walk() parcourt un dossier et ses sous-dossiers de manière récursive.
- À chaque étape, elle fournit le dossier courant, ses sous-dossiers et ses fichiers.
- os.path.join() permet de construire le chemin des fichiers rencontrés.
- Il est possible de rechercher un fichier dans toute une arborescence.
- endswith() permet de sélectionner les fichiers selon leur extension.
- Il est possible de compter les fichiers et les dossiers rencontrés.
- La modification de la liste des sous-dossiers permet d'exclure certains répertoires du parcours.
Le programme suivant résume une utilisation courante de os.walk() en affichant le chemin de tous les fichiers contenus dans une arborescence.
1 2 3 4 5 6 | import os for dossier, sous_dossiers, fichiers in os.walk("documents"): for fichier in fichiers: chemin = os.path.join(dossier, fichier) print(chemin) |
Sortie possible :
1 2 3 4 5 | documents/cours.txt documents/python/listes.py documents/python/fichiers.py documents/images/logo.png documents/images/photo.jpg |
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/


