Maison >développement back-end >Tutoriel Python >Comment puis-je rechercher et répertorier efficacement des fichiers dans des sous-dossiers à l'aide de Python ?

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

Barbara Streisand
Barbara Streisandoriginal
2024-10-29 23:23:29656parcourir

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>

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>

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>

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