Как вычислить самые последние подпапки?

Есть структура каталогов. Любая. В ней где то 3-4 уровня вложенности. Именно 3-4, т.е. где то 3, где то 4.

Нужно как то бахнуть действия с подпапкой именно там, где уже дальше подпапок нету. Т.е. только с теми подпапками, которые содержат только файлы.

Сейчас нарисовал себе вот такого монстра, который вроде как работает:

    for root, dirs, files in os.walk(folder_path, topdown=False):
        for name in dirs:
            sub_folder_path = os.path.join(root, name)

            for sub_root, sub_dirs, sub_files in os.walk(sub_folder_path, topdown=False):
                len_sub_dirs = len(sub_dirs)

            if not len_sub_dirs:
                print(sub_folder_path)

Пробовал гуглить - найти какую то простую проверку не удалось... Есть ли вариант оформить это как то проще? Заменить нижний for на что то попроще? Мне и количество то по идее не нужно, нужен сам факт - есть ли там хоть одна подпапка, или только файлы.


Ответы (1 шт):

Автор решения: Eugene X

Ты будешь долго смеяться, но ты уже написал готовое решение =)

Просто немного неправильно.

os.walk - это уже deep обработчик папки. То-есть он смотрит папку, подпапки и файлы.

from os import walk

result: list[str] = []
for (path, folders, files) in walk(folder_path):
    # path - папка, folders - имена подпапок, files - имена файлов
    if len(folders) == 0: # если нету подпапок
        result.append(path)
print(result)
→ Ссылка