Maison  >  Article  >  développement back-end  >  Comment répertorier efficacement les fichiers des sous-dossiers récursifs en Python ?

Comment répertorier efficacement les fichiers des sous-dossiers récursifs en Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-31 22:07:17642parcourir

How to Efficiently List Files from Recursive Subfolders in Python?

Recherche récursive de sous-dossiers pour lister les fichiers : comment affiner le processus

Lors de la recherche dans les sous-dossiers et de la construction d'une liste de types de fichiers spécifiques, il est essentiel de s'assurer que le sous-dossier La variable pointe vers le bon dossier. L'extrait de code suivant illustre ce problème :

<code class="python">for root, subFolder, files in os.walk(PATH):
    for item in files:
        if item.endswith(".txt"):
            fileNamePath = str(os.path.join(root, subFolder, item))</code>

Ici, la variable subFolder contient une liste de sous-dossiers au lieu du dossier où réside le fichier ITEM. Pour remédier à cela, nous pouvons utiliser le chemin d'accès, représenté par la variable racine, car il contient le chemin de répertoire correct. Cet extrait de code modifié résout le problème :

<code class="python">import os
result = [os.path.join(dp, f) for dp, dn, filenames in os.walk(PATH) for f in filenames if os.path.splitext(f)[1] == '.txt']</code>

Une autre approche élégante consiste à utiliser le module glob, qui sélectionne efficacement les fichiers en fonction de leurs extensions :

<code class="python">from glob import glob
result = [y for x in os.walk(PATH) for y in glob(os.path.join(x[0], '*.txt'))]</code>

Offre Python 3.4 et versions ultérieures une version génératrice de la solution basée sur glob :

<code class="python">from itertools import chain
result = (chain.from_iterable(glob(os.path.join(x[0], '*.txt')) for x in os.walk('.')))</code>

Enfin, pour Python 3.4, une approche moderne utiliser le module pathlib est :

<code class="python">from pathlib import Path
result = list(Path(".").rglob("*.[tT][xX][tT]"))</code>

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn