Comment puis-je rechercher et répertorier efficacement des fichiers dans des sous-dossiers à l'aide de Python ?

Barbara Streisand
Libérer: 2024-10-29 23:23:29
original
578 Les gens l'ont consulté

How can I efficiently search for and list files within subfolders using Python?

Recherche récursive de sous-dossiers et liste de fichiers

Il est courant de rencontrer des scénarios dans lesquels vous devez parcourir plusieurs sous-dossiers et extraire des fichiers spécifiques en fonction de leur extension de fichier. Une approche pour résoudre ce problème consiste à exploiter la fonction os.walk intégrée de Python, qui permet une exploration récursive des répertoires et de leur contenu.

Cependant, comme rencontré dans cette question, le comportement problématique survient lors de la tentative de concaténation des fichiers. chemins des fichiers. La variable subFolder renvoyée par os.walk représente une liste de sous-dossiers plutôt que le dossier spécifique où réside chaque fichier.

Pour remédier à ce problème, l'approche correcte consiste à utiliser le chemin d'accès (ou la racine dans le code donné) , qui représente le répertoire actuel pour l'itération. La valeur du chemin d'accès doit être concaténée avec le nom du fichier pour construire le chemin complet du fichier.

De plus, il est important de prendre en compte des facteurs supplémentaires tels que l'élagage de certains dossiers du processus de récursion, qui peut être obtenu en examinant le dn (nom du répertoire). Pour éviter de recourir à la manipulation de chaînes pour vérifier les extensions de fichiers, vous pouvez utiliser la fonction os.path.splitext.

Voici une version optimisée du code qui intègre ces améliorations :

<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

Comme alternative, glob est un autre outil puissant qui peut être utilisé pour sélectionner des fichiers en fonction de leurs extensions. Voici un exemple utilisant glob :

<code class="python">import os
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

Pour Python 3.4, Pathlib fournit une approche intuitive pour cette tâche :

<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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!