Перечислите только все подкаталоги с png внутри внутри python с os.walk - PullRequest
1 голос
/ 29 марта 2019

Мне нужно несколько советов и помочь с моей проблемой. Я хочу сделать выпадающее меню в ноутбуках Jupyter над каталогом. Внутри этого каталога находятся dir´s с png´s, а некоторые dir´s с subdir´s с png´s. Теперь я хочу получить список всех каталогов с png внутри. Но не Дирс с Дирс внутри. Банкомат я получаю каждый dir, но это неправильно, потому что я могу просто использовать dir с png внутри. Вот мой код банкомат:

dir_path = 'Learning set/Calanus hyp/Chyp 1/'
path = 'Learning set/'   

for root, dirs, files in os.walk(path):
    for name in dirs:
        if ([os.path.isfile(os.path.join(path, f)) for f in os.listdir(path)]) == True:
            namelist += [os.path.join(root,name)]

def get_and_plot(b):
    clear_output()
    global dir_path
    dir_path_new=test.value+"/"
    dir_path=dir_path_new
    global counter
    counter=0
    execute()

test.observe(get_and_plot, names='value')

В качестве примера: У меня есть каталог "Учебный комплект", и я хочу получить выпадающий список. Но выпадающее меню показывает мне Birble dir´s, Bubble1, Bubble2 и т. Д. Внутри dir's BubbleX есть pngs внутри. Правильно. Но Bubble dir просто реализует другие BubbleX dir´s. Что я могу сделать, чтобы получить список всех последних вложенных папок?

1 Ответ

1 голос
/ 29 марта 2019

root будет текущим каталогом во время прогулки . Если какой-либо из его файлов соответствует вашим критериям, добавьте root в список (или другой контейнер).

dirs_i_want = []
for root, dirs, files in os.walk(path):
    if any(fyle.endswith('png') for fyle in files:
        dirs_i_want.append(root)

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

...
    if all(fyle.endswith('png') for fyle in files:
        ...
...