У меня недавно был похожий вопрос, и я обнаружил, что лучший ответ для python 3.6 (как добавил пользовательский havlock) - использовать os.scandir
. Поскольку кажется, что нет решения с его использованием, я добавлю свое. Во-первых, нерекурсивное решение, которое перечисляет только подкаталоги непосредственно в корневом каталоге.
def get_dirlist(rootdir):
dirlist = []
with os.scandir(rootdir) as rit:
for entry in rit:
if not entry.name.startswith('.') and entry.is_dir():
dirlist.append(entry.path)
dirlist.sort() # Optional, in case you want sorted directory names
return dirlist
Рекурсивная версия будет выглядеть так:
def get_dirlist(rootdir):
dirlist = []
with os.scandir(rootdir) as rit:
for entry in rit:
if not entry.name.startswith('.') and entry.is_dir():
dirlist.append(entry.path)
dirlist += get_dirlist(entry.path)
dirlist.sort() # Optional, in case you want sorted directory names
return dirlist
имейте в виду, что entry.path
использует абсолютный путь к подкаталогу. Если вам нужно только имя папки, вы можете использовать entry.name
. Обратитесь к os.DirEntry для получения дополнительной информации об объекте entry
.