Высокоуровневые операции с путями файловой системой.
Очень полезный модуль, который по сути объединяет в себе часто используемые функции двух стандартных модулей
os
и
os.path
, а так же
стандартную функцию open()
для чтения файла и записи в файл какой либо информации.
Модуль pathlib
предлагает классы, представляющие пути файловой системы с семантикой, подходящей для различных операционных систем. Классы путей делятся между
чистыми путями, которые обеспечивают чисто вычислительные операции без ввода-вывода и
конкретными путями, которые наследуются от чистых путей, но также обеспечивают операции ввода-вывода.
Если вы никогда ранее не использовали этот модуль или просто не уверены, какой класс подходит для вашей задачи, то лучше использовать
pathlib.Path()
, т. к. он создает конкретный путь для платформы, на которой выполняется код.
Чистые пути полезны в некоторых особых случаях:
- Если необходимо манипулировать путями Windows на машине Unix или наоборот. Если нет возможности создать экземпляр
WindowsPath
при работе в Unix, для этого создается экземпляр PureWindowsPath
. - Если необходимо манипулировать только путями без фактического доступа к ОС. В этом случае может быть полезным создание одного из чистых классов, т.к. у них просто нет доступа к операциям с файловой системой.
Основное использование:
Импорт основного класса:
>>> from pathlib import Path
Список подкаталогов:
>>> p = Path('.')
>>> [x for x in p.iterdir() if x.is_dir()]
# [PosixPath('.hg'), PosixPath('docs'), PosixPath('dist'),
# PosixPath('__pycache__'), PosixPath('build')]
Перечисление исходных файлов Python в дереве каталогов:
>>> list(p.glob('**/*.py'))
# [PosixPath('test_pathlib.py'), PosixPath('setup.py'),
# PosixPath('pathlib.py'), PosixPath('docs/conf.py'),
# PosixPath('build/lib/pathlib.py')]
Навигация внутри дерева каталогов:
>>> p = Path('/')
>>> x = p / 'etc' / 'fstab'
>>> x
# PosixPath('/etc/fstab')
# Для преобразования пути в строку просто
# передайте объект пути в функцию str()
>>> str(x)
# '/etc/fstab'
>>> x.resolve()
# PosixPath('/etc/fstab')
Запрос свойств пути:
>>> q.exists()
# True
>>> q.is_dir()
# False
Открытие файла:
>>> with q.open() as f: f.readline()
...
'# /etc/fstab: static file system information.\n'