«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как рекурсивно искать подпапки и получать файлы в Python?

Как рекурсивно искать подпапки и получать файлы в Python?

Опубликовано 16 ноября 2024 г.
Просматривать:365

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

Рекурсивный поиск по подпапкам и извлечение файлов

В сфере программирования обход каталогов и извлечение файлов могут быть обычной задачей. Одним из эффективных подходов является использование рекурсивного алгоритма для поиска по подпапкам и накопления списка файлов, соответствующих определенным критериям.

Возникла проблема

Пользователь столкнулся с контрольно-пропускным пунктом при попытке создать список конкретных файлов при рекурсивном поиске в подпапках. Проблема возникла из-за того, что переменная подпапки извлекала список подпапок вместо текущей папки, содержащей файл.

Назначение подпапки

Переменная subFolder предназначена для хранения имя подпапки в основной папке, в которой находится нужный файл.

Решение

Ключ к решению этой проблемы заключается в использовании «корня» или переменная «dirpath» вместо «subFolder». Эта переменная содержит абсолютный путь к текущему каталогу, проходимому во время рекурсии. Включив этот путь в конструкцию fileNamePath, можно достичь желаемой точности.

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

Усовершенствование модуля Glob

Альтернативный и эффективный подход предполагает использование встроенного в Python модуля glob. Glob отлично подходит для выбора файлов по их расширениям.

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

Функция-генератор

Для краткой и эффективной реализации можно также использовать функцию генератора.

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

Python 3.4 Решение

Если вы работаете с Python 3.4 или более поздней версии, вы можете использовать функцию rglob() модуля pathlib.

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

Эти подходы предоставляют эффективные решения для рекурсивного поиска подпапок и составления списка файлы, соответствующие желаемым критериям, что упрощает задачу поиска файлов.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3