41 votes

Itérer récursivement à travers tous les sous-répertoires en utilisant pathlib

Comment puis-je utiliser pathlib pour itérer récursivement sur tous les sous-répertoires d'un répertoire donné?

 p = Path('docs')
for child in p.iterdir(): child
 

semble seulement itérer sur les enfants immédiats d'un répertoire donné.

Je sais que c'est possible avec os.walk() ou glob , mais je veux utiliser pathlib parce que j'aime travailler avec les objets path.

54voto

pylang Points 12013

Utiliser Path.rglob (remplace le ** en Path().glob("**/*") ):

 path = Path("docs")
for p in path.rglob("*"):
     print(p.name)
 

41voto

Jacques Gaudin Points 4478

Vous pouvez utiliser le glob méthode de Path objet:

 p = Path('docs')
for i in p.glob('**/*'):
     print(i.name)
 

5voto

Sijan Bhandari Points 1318

pathlib a la méthode glob où nous pouvons fournir un modèle comme argument.

Par exemple: Path('abc').glob('**/*.txt') - Il recherchera récursivement le dossier actuel abc et tous les autres sous-répertoires pour localiser tous les fichiers txt .

1voto

dzenilee Points 1

Utilisation interprétations de la liste:

(1) [f.name for f in p.glob("**/*")]  # or
(2) [f.name for f in p.rglob("*")]

Vous pouvez ajouter if f.is_file() ou if f.is_dir() (1) ou (2) si vous souhaitez cibler uniquement les fichiers ou répertoires, respectivement. Ou remplacer "*" avec certain modèle comme l' "*.txt" si vous souhaitez cibler .txt uniquement des fichiers.

Consultez ce guide de guide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X