Python Glossary English

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Сообщить о неточности