Python рекурсивный os.path добавить с некоторым тормозом - PullRequest
0 голосов
/ 13 сентября 2018

Привет, это мой первый пост (!) Просто присматриваю за головной болью рекурсивное решение моего маленького проекта:)

Попытка собрать путь ко всем папкам (рекурсивно), вот это какой-то специальный файл к массиву путей.

например: мой (корневой) путь:

C: / тест

папка test содержит файл 'test.txt' и некоторые папки: «1», «2», «3». любой из них также содержит «test.txt»! (если 'text.txt' не найден: просто затормозить петлю и не искать в подпапках!)

теперь моя функция будет искать 'test.txt' а затем собрать все папки в мой список папок:

if os.path.exists(os.path.join(path, 'test.txt')):
full_list = os.listdir(path)
        folderslist = []
        for folder in full_list:
            if os.path.isfile(os.path.join(path, folder)) == 0:
                folderslist.append(os.path.join(path, folder))

работает неплохо, просто не рекурсивно ... действительно не знаю, как снова вызвать функцию с тем же списком, и заставить его изменить «текущий путь» ... я не уверен, что 'list' - лучшая структура данных для меня, чтобы я мог вызывать ее снова.

Моя цель состоит в том, чтобы сделать опрацию в каждом фордере в этом списке:

c: / test c: / test / 1 c: / test / 2 c: / test / 3

но если есть еще папки (которые не содержат 'test.txt', просто не добавляйте его в мой список папок и не заглядывайте внутрь)

надеюсь, мой первый пост был достаточно ясен: X

1 Ответ

0 голосов
/ 13 сентября 2018

Вы можете использовать os.walk для обхода подпапок, и если test.txt не найден, очистите список каталогов, чтобы os.walk больше не проходил его подпапки:

import os
folderslist = []
for root, dirs, files in os.walk('c:/test'):
    if 'test.txt' in files:
        folderslist.append(root)
    else:
        dirs.clear()
...