Maison > développement back-end > Tutoriel Python > 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
Libérer: 2024-10-31 22:07:17
original
765 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal