"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-16
Parcourir:918

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 obstacle. 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

Le La clé pour résoudre ce problème réside dans l'exploitation de la variable « root » ou « 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.

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']

Amélioration du module Global

Une approche alternative et efficace consiste à utiliser le module glob intégré de Python. Glob excelle dans la sélection de fichiers en fonction de leurs extensions.

import os
from glob import glob
result = [y for x in os.walk(PATH) for y in glob(os.path.join(x[0], '*.txt'))]

Fonction de générateur

Pour une implémentation concise et efficace, on peut également utiliser une fonction génératrice.

from itertools import chain
result = (chain.from_iterable(glob(os.path.join(x[0], '*.txt')) for x in os.walk('.')))

Python 3.4 Solution

Si vous travaillez avec Python 3.4 ou version ultérieure, vous pouvez exploiter le rglob() du module pathlib function.

from pathlib import Path
result = list(Path(".").rglob("*.[tT][xX][tT]"))

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, ce qui rend vos tâches de récupération de fichiers un jeu d'enfant.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3