Рекурсивное получение имен файлов по шаблону из дерева каталогов.
Содержание:
Path.glob(pattern)
:
Метод
Path.glob()
возвращает
список всех файлов любого типа, соответствующий заданному шаблону
pattern
, расположенных в каталоге, указанном в пути
path
.
Изменено в Python 3.11: возвращает только каталоги, если шаблон
pattern
заканчивается разделителем компонентов пути (
os.sep
или os.altsep
).
>>> from pathlib import Path
>>> paths = sorted(Path('.').glob('*.py'))
>>> paths
# [PosixPath('pthlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')]
# преобразуем в список строк
list(map(str, paths))
# ['pthlib.py', 'setup.py', 'test_pathlib.py']
>>> path = sorted(Path('.').glob('*/*.py'))
>>> path
# [PosixPath('docs/conf.py')]
# что бы преобразовать объект PosixPath в строку
# просто передайте его в функцию str()
>>> str(path)
# 'docs/conf.py'
Шаблон '**'
указывает на рекурсивный обход в глубину каталога, указанного в пути path
, и всех его подкаталогов:
>>> from pathlib import Path
>>> paths = sorted(Path('.').glob('**/*.py'))
>>> paths
# [PosixPath('build/lib/pathlib.py'),
# PosixPath('docs/conf.py'),
# PosixPath('pathlib.py'),
# PosixPath('setup.py'),
# PosixPath('test_pathlib.py')]
# преобразуем в список строк
>>> list(map(str, paths))
# ['build/lib/pathlib.py',
# docs/conf.py,
# pathlib.py,
# 'setup.py'
# 'test_pathlib.py']
Примечание. Использование шаблона '**'
в больших деревьях каталогов может занять слишком много времени.
Path.rglob(pattern)
:
Метод
Path.rglob()
работает подобно вызову метода
Path.glob()
с добавлением конструкции
'**/'
перед заданным относительным шаблоном
pattern
, тем самым по умолчанию производит рекурсивный поиск файлов, соответствующих
pattern
:
Изменено в Python 3.11: возвращает только каталоги, если шаблон
pattern
заканчивается разделителем компонентов пути (
os.sep
или os.altsep
).
>>> from pathlib import Path
>>> sorted(Path().rglob("*.py"))
# [PosixPath('build/lib/pathlib.py'),
# PosixPath('docs/conf.py'),
# PosixPath('pathlib.py'),
# PosixPath('setup.py'),
# PosixPath('test_pathlib.py')]
Path.iterdir()
:
Метод
Path.iterdir()
вернет
итератор объектов пути содержимого каталога, если путь
path
указывает на каталог:
>>> from pathlib import Path
>>> p = Path('docs')
>>> for child in p.iterdir(): str(child)
...
# 'docs/conf.py'
# 'docs/_templates'
# 'docs/make.bat'
# 'docs/index.rst'
# 'docs/_build'
# 'docs/_static'
# 'docs/Makefile'
Дополнительно смотрите:
os.listdir()
- список файлов в директории/каталоге,os.scandir()
- информация о всех файлах в каталоге/директории,glob.glob()
- рекурсивный поиск файлов по шаблону,os.walk()
- рекурсивный обход каталога как в глубину, так и из глубины.