Python 3.4+pathlibфункция
.iterdir()
обход
Итерирует по всем файлам и поддиректориям непосредственно в данной директории (не рекурсивно).
Синтаксис
for item in p.iterdir(): ...
Возвращает одноразовый итератор, а не список, и порядок задаёт файловая система — для предсказуемого вывода оборачивайте в sorted(). Каждый элемент — полный Path вместе с родительскими каталогами, а не голое имя (имя берётся из .name). Вглубь iterdir() не спускается: для рекурсивного обхода нужен rglob('*'), а отбор по маске удобнее сделать через glob('*.txt').
Примеры
from pathlib import Path
# Свой каталог в текущем, а не системная временная папка: пример ничего не пишет снаружи.
base = Path('iterdir_demo')
base.mkdir(exist_ok=True)
(base / 'a.txt').write_text('a', encoding='utf-8')
(base / 'b.log').write_text('b', encoding='utf-8')
(base / 'sub').mkdir(exist_ok=True)
# Обход содержимого — не рекурсивный: только прямые дети
print(sorted((p.name, p.is_dir()) for p in base.iterdir()))
# → [('a.txt', False), ('b.log', False), ('sub', True)]
# Фильтрация
files = [p for p in base.iterdir() if p.is_file()]
dirs = [p for p in base.iterdir() if p.is_dir()]
print(len(files), len(dirs)) # → 2 1
# Рекурсивный обход — это уже rglob, а не iterdir
print(sorted(p.name for p in base.rglob('*.txt'))) # → ['a.txt']
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности