Utilisation de os.walk() pour parcourir récursivement des répertoires en Python : un guide détaillé
Introduction
La fonction os.walk() de Python fournit un mécanisme puissant pour parcourir de manière récursive les arborescences de répertoires. Il parcourt tous les répertoires et fichiers d'un répertoire spécifié, ce qui en fait un outil essentiel pour des tâches telles que la gestion de fichiers et l'exploration de répertoires.
Problème : personnalisation de la sortie de la liste des répertoires
Pour démontrer les capacités de os.walk(), considérons le scénario suivant : vous souhaitez naviguer de manière récursive à partir du répertoire racine et imprimer une liste personnalisée de répertoires et de fichiers, y compris les répertoires imbriqués. niveaux.
Code initial et O/P
En utilisant le code suivant :
import os import fnmatch for root, dir, files in os.walk("."): print(root) print("") for items in fnmatch.filter(files, "*"): print("..." + items) print("")
Vous obtenez le résultat suivant :
. ...Python_Notes ...pypy.py ...pypy.py.save ...classdemo.py ....goutputstream-J9ZUXW ...latest.py ...pack.py ...classdemo.pyc ...Python_Notes~ ...module-demo.py ...filetype.py ./packagedemo ...classdemo.py ...__init__.pyc ...__init__.py ...classdemo.pyc
Cependant, cette sortie ne répond pas au format souhaité de :
A ---a.txt ---b.txt ---B ------c.out
Solution
Pour personnaliser la sortie, une approche améliorée est nécessaire. Le code suivant obtient le format souhaité :
import os # traverse root directory, and list directories as dirs and files as files for root, dirs, files in os.walk("."): path = root.split(os.sep) print((len(path) - 1) * '---', os.path.basename(root)) for file in files: print(len(path) * '---', file)
Explication
Ce code utilise la logique suivante :
Sortie
Utilisation de cette amélioration code, vous obtiendrez le résultat souhaité :
A ---a.txt ---b.txt ---B ------c.out
Dans cette sortie, A et B représentent des répertoires, tandis que a.txt, b.txt et c.out représentent des fichiers. Le nombre de préfixes tirets indique le niveau d'imbrication de chaque élément.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!