"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo buscar recursivamente subcarpetas y recuperar archivos en Python?

¿Cómo buscar recursivamente subcarpetas y recuperar archivos en Python?

Publicado el 2024-11-16
Navegar:545

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

Búsqueda recursiva de subcarpetas y recuperación de archivos

En el ámbito de la programación, recorrer directorios y recuperar archivos puede ser una tarea común. Un enfoque eficaz es emplear un algoritmo recursivo para buscar en subcarpetas y acumular una lista de archivos que cumplan criterios específicos.

Problema encontrado

Un usuario encontró un obstáculo al intentar crear una lista de archivos específicos en una búsqueda recursiva de subcarpetas. El problema surgió porque la variable subcarpeta extraía una lista de subcarpetas en lugar de la carpeta actual que contiene el archivo.

Propósito de la subcarpeta

La variable subcarpeta está destinada a contener el nombre de la subcarpeta bajo la carpeta principal donde se encuentra el archivo deseado.

Resolución

La clave para resolver este problema radica en aprovechar la "raíz" o variable "dirpath" en lugar de "subCarpeta". Esta variable contiene la ruta absoluta al directorio actual que se recorre durante la recursividad. Al incorporar esta ruta en la construcción de fileNamePath, se puede lograr la precisión deseada.

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

Mejora del módulo global

Un enfoque alternativo y eficiente implica utilizar el módulo global integrado de Python. Glob se destaca en la selección de archivos según sus extensiones.

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

Función generadora

Para una implementación concisa y eficiente, también se puede emplear una función generadora.

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

Python 3.4 Solución

Si está trabajando con Python 3.4 o posterior, puede aprovechar la función rglob() del módulo pathlib.

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

Estos enfoques proporcionan soluciones efectivas para buscar subcarpetas de forma recursiva y compilar una lista de archivos que cumplen con los criterios deseados, lo que facilita las tareas de recuperación de archivos.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3