Recherche récursive de sous-dossiers et récupération de fichiers
Dans le domaine de la programmation, parcourir des répertoires et récupérer des fichiers peut être une tâche courante. Une approche efficace consiste à utiliser un algorithme récursif pour rechercher dans les sous-dossiers et accumuler une liste de fichiers répondant à des critères spécifiques.
Problème rencontré
Un utilisateur a rencontré un barrage routier tout en essayant de créer une liste de fichiers spécifiques dans une recherche récursive de sous-dossiers. Le problème provenait du fait que la variable de sous-dossier extrayait une liste de sous-dossiers au lieu du dossier actuel contenant le fichier.
Objectif du sous-dossier
La variable subFolder est destinée à contenir le nom du sous-dossier sous le dossier principal où se trouve le fichier souhaité.
Résolution
La clé pour résoudre ce problème réside dans l'exploitation de la "racine" ou la variable "dirpath" au lieu de "subFolder". Cette variable contient le chemin absolu vers le répertoire actuel parcouru lors de la récursivité. En incorporant ce chemin dans la construction du fileNamePath, la précision souhaitée peut être obtenue.
<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>
Amélioration du module global
Une approche alternative et efficace consiste à utiliser Python module global intégré. Glob excelle dans la sélection de fichiers en fonction de leurs extensions.
<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>
Fonction générateur
Pour une implémentation concise et efficace, on peut également utiliser une fonction générateur.
<code class="python">from itertools import chain result = (chain.from_iterable(glob(os.path.join(x[0], '*.txt')) for x in os.walk('.')))</code>
Solution Python 3.4
Si vous travaillez avec Python 3.4 ou une version ultérieure, vous pouvez exploiter la fonction rglob() du module pathlib.
<code class="python">from pathlib import Path result = list(Path(".").rglob("*.[tT][xX][tT]"))</code>
Ces approches fournissent des solutions efficaces pour rechercher de manière récursive des sous-dossiers et compiler une liste de fichiers répondant aux critères souhaités, facilitant ainsi vos tâches de récupération de fichiers.
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!