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
734 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!

source:php.cn
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