Определяем подкаталоги в текущем каталоге
Обозначим текущий каталог для работы:
path = "./"
Способ 1
Вытаскиваем все файлы из каталога:
import os
os.listdir(path) # не включает специальные записи '.' и '..'
Результат выполнения:
['4.txt',
'some_module.py',
'0.txt',
'.txt',
'2.txt',
'Подкаталоги в текущем каталоге.ipynb',
'командная_оболочка.ipynb',
..
Самый простой способ определить подкаталог:
import os
dir_list = []
for item in os.listdir(path):
if os.path.isdir(item):
dir_list.append(item)
dir_list
Результат выполнения:
['__pycache__', 'ipython', '.ipynb_checkpoints']
Способ 2
Для глубокого анализа содержимого каталога лучше использовать функцию scandir, которая возвращает итератор:
dir_list = []
with os.scandir(path) as it: # лучше использовать менеджер контекста, чтобы освободить ресурсы
for entry in it:
if entry.is_dir(): # здесь есть нужный нам метод
dir_list.append(entry.name)
dir_list
Способ 3
Сложность работы с файлами и каталогами состоит в различиях на уровне ОС, поэтому см. модуль pathlib, созданный в ООП-стиле. Он предлагает унифицированный интерфейс для работы с разными ОС:
from pathlib import Path
p = Path(path)
type(p)
Результат выполнения:
pathlib.PosixPath
Модуль работает с типом данных pathlib.PosixPath, но мы ничего не боимся и смело преобразуем все в строку:
[str(x) for x in p.iterdir() if x.is_dir()]
Про pathlib можно подробнее почитать тут.
Способ 4
Двигаемся дальше и воспользуемся возможностями оболочки IPython:
!ls -a ./
Можем получить содержимое каталога и оставить в нем только подкаталоги (про grep писал ранее тут):
file_list = !ls -a ./
file_list.grep(os.path.isdir) # os.path.isfile
Результат выполнения:
['.', '..', '.ipynb_checkpoints', 'ipython', '__pycache__']