Быстро получить все подкаталоги с помощью Python

Я знаю, что на вопрос о том, как перечислить все подкаталоги в заданных каталогах, отвечает в этом вопросе от 2011. Он включает в себя это принятое решение:

subdirs = [x[0] for x in os.walk(dirToSearch)]

Это прекрасно работает, когда в каталоге всего несколько файлов. Однако я пытаюсь использовать это в папках, содержащих тысячи файлов, и os.walk, по-видимому, перебирает их все, а это означает, что для запуска требуется очень много времени. Есть ли способ сделать это (определить все подкаталоги), не увязая в файлах? Альтернатива os.walk, которая игнорирует файлы?

Я пытаюсь сделать это в сетевом каталоге Windows.

Спасибо, Алекс


person Alex S    schedule 12.05.2020    source источник


Ответы (1)


Вы можете использовать pathlib для этого.

Это получит все непосредственные подкаталоги:

from pathlib import Path

p = Path('.')
subdirs = [x for x in p.iterdir() if x.is_dir()]

Это получит все вложенные подкаталоги:

for subdir in p.glob('**/'):
     print(subdir.name)
person Kurt Kline    schedule 12.05.2020
comment
Идеальный! Большое спасибо. - person Alex S; 12.05.2020
comment
Без проблем. Я обновил свой ответ, если вам нужны как непосредственные подкаталоги, так и все вложенные подкаталоги. - person Kurt Kline; 12.05.2020
comment
Хм, я сказал слишком рано. Хотя ваш первый метод отлично работает для поиска в непосредственных подкаталогах, ваш метод для получения всех вложенных подкаталогов не кажется более быстрым, чем другие методы. Любые идеи? - person Alex S; 13.05.2020