Maison  >  Article  >  développement back-end  >  Comment rechercher de manière récursive des sous-dossiers et récupérer des fichiers en Python ?

Comment rechercher de manière récursive des sous-dossiers et récupérer des fichiers en Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-30 04:12:28162parcourir

How to Recursively Search Sub-Folders and Retrieve Files in Python?

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!

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