Рекурсивный поиск по подпапкам и извлечение файлов
В сфере программирования обход каталогов и извлечение файлов могут быть обычной задачей. Одним из эффективных подходов является использование рекурсивного алгоритма для поиска по подпапкам и накопления списка файлов, соответствующих определенным критериям.
Возникла проблема
Пользователь столкнулся с контрольно-пропускным пунктом при попытке создать список конкретных файлов при рекурсивном поиске в подпапках. Проблема возникла из-за того, что переменная подпапки извлекала список подпапок вместо текущей папки, содержащей файл.
Назначение подпапки
Переменная 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