Содержание страницы
11.1. pathlib – Объектно-ориентированные пути к файловой системе¶pathlib – Object-oriented filesystem paths
Новое в версии 3.4.
Исходный код: Lib/pathlib.py
Этот модуль предоставляет классы, представляющие пути файловой системы с семантикой, подходящей для разных операционных систем. Классы путей делятся на чистые пути, которые выполняют только вычислительные операции без ввода-вывода, и конкретные пути, которые наследуют чистые пути, но также предоставляют операции ввода-вывода.
Если вы никогда не пользовались этим модулем раньше или просто не уверены, какой класс подходит для вашей задачи, скорее всего, вам нужен Path. Он создаёт экземпляр конкретного пути для платформы, на которой выполняется код.
Чистые пути полезны в некоторых особых случаях; например:
- Если требуется манипулировать путями Windows на машине Unix (или наоборот). При работе на Unix нельзя создать экземпляр
WindowsPath, но можно создатьPureWindowsPath. - Если нужно, чтобы код только манипулировал путями без фактического обращения к ОС. В таком случае может быть полезно создать экземпляр одного из чистых классов, поскольку они просто не имеют операций доступа к ОС.
Примечание
Этот модуль был включён в стандартную библиотеку на временной основе. Обратно несовместимые изменения (вплоть до удаления пакета) могут быть внесены, если основные разработчики сочтут это необходимым.
См. также
PEP 428: модуль pathlib – объектно-ориентированные пути файловой системы.
См. также
Для низкоуровневых манипуляций с путями в виде строк можно также использовать модуль os.path.
11.1.1. Основное использование¶Basic use
Импорт основного класса:
>>> 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('/etc')
>>> q = p / 'init.d' / 'reboot'
>>> q
PosixPath('/etc/init.d/reboot')
>>> q.resolve()
PosixPath('/etc/rc.d/init.d/halt')
Запрос свойств пути:
>>> q.exists()
True
>>> q.is_dir()
False
Открытие файла:
>>> with q.open() as f: f.readline()
...
'#!/bin/bash\n'
11.1.2. Чистые пути¶Pure paths
Объекты чистых путей предоставляют операции обработки путей, которые не обращаются к файловой системе. Существует три способа доступа к этим классам, которые также называются разновидностями:
-
class
pathlib.PurePath(*pathsegments)¶ Общий класс, представляющий разновидность пути системы (при создании экземпляра создаётся либо
PurePosixPath, либоPureWindowsPath):>>> PurePath('setup.py') # Запуск на Unix-машине PurePosixPath('setup.py')
Каждый элемент pathsegments может быть либо строкой, представляющей сегмент пути, либо другим объектом пути:
>>> PurePath('foo', 'some/path', 'bar') PurePosixPath('foo/some/path/bar') >>> PurePath(Path('foo'), Path('bar')) PurePosixPath('foo/bar')
Когда pathsegments пуст, подразумевается текущий каталог:
>>> PurePath() PurePosixPath('.')
Когда передано несколько абсолютных путей, последний используется как привязка (по аналогии с поведением
os.path.join()):>>> PurePath('/etc', '/usr', 'lib64') PurePosixPath('/usr/lib64') >>> PureWindowsPath('c:/Windows', 'd:bar') PureWindowsPath('d:bar')
Однако в пути Windows смена локального корня не отбрасывает предыдущую настройку диска:
>>> PureWindowsPath('c:/Windows', '/Program Files') PureWindowsPath('c:/Program Files')
Лишние косые черты и одиночные точки схлопываются, но двойные точки (
'..') – нет, так как это изменило бы смысл пути при наличии символических ссылок:>>> PurePath('foo//bar') PurePosixPath('foo/bar') >>> PurePath('foo/./bar') PurePosixPath('foo/bar') >>> PurePath('foo/../bar') PurePosixPath('foo/../bar')
(наивный подход сделал бы
PurePosixPath('foo/../bar')эквивалентнымPurePosixPath('bar'), что неверно, еслиfooявляется символической ссылкой на другой каталог)
-
class
pathlib.PurePosixPath(*pathsegments)¶ Подкласс
PurePath, эта разновидность путей представляет пути файловой системы, отличные от Windows:>>> PurePosixPath('/etc') PurePosixPath('/etc')
Параметр pathsegments задаётся так же, как
PurePath.
-
class
pathlib.PureWindowsPath(*pathsegments)¶ Подкласс
PurePath, этот вариант пути представляет пути файловой системы Windows:>>> PureWindowsPath('c:/Program Files/') PureWindowsPath('c:/Program Files')
Параметр pathsegments задаётся так же, как
PurePath.
Независимо от используемой системы можно создавать экземпляры всех этих классов, поскольку они не предоставляют никаких операций, совершающих системные вызовы.
11.1.2.1. Общие свойства¶General properties
Пути неизменяемы и хешируемы. Пути одного варианта сравнимы и упорядочиваемы. Эти свойства учитывают семантику регистрозависимости данного варианта:
>>> PurePosixPath('foo') == PurePosixPath('FOO')
False
>>> PureWindowsPath('foo') == PureWindowsPath('FOO')
True
>>> PureWindowsPath('FOO') in { PureWindowsPath('foo') }
True
>>> PureWindowsPath('C:') < PureWindowsPath('d:')
True
Пути разных разновидностей неравны и не упорядочиваются:
>>> PureWindowsPath('foo') == PurePosixPath('foo')
False
>>> PureWindowsPath('foo') < PurePosixPath('foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: PureWindowsPath() < PurePosixPath()
11.1.2.2. Операторы¶Operators
Оператор слэш помогает создавать дочерние пути, аналогично os.path.join():
>>> p = PurePath('/etc')
>>> p
PurePosixPath('/etc')
>>> p / 'init.d' / 'apache2'
PurePosixPath('/etc/init.d/apache2')
>>> q = PurePath('bin')
>>> '/usr' / q
PurePosixPath('/usr/bin')
Строковое представление пути – это сам сырой путь файловой системы (в нативном виде, например с обратными слешами в Windows), который можно передать любой функции, принимающей путь к файлу в виде строки:
>>> p = PurePath('/etc')
>>> str(p)
'/etc'
>>> p = PureWindowsPath('c:/Program Files')
>>> str(p)
'c:\\Program Files'
Аналогично, вызов bytes для пути возвращает сырой путь файловой системы в виде
объекта bytes, закодированный с помощью os.fsencode():
>>> bytes(p)
b'/etc'
Примечание
Вызов bytes рекомендуется только в Unix. В Windows
форма Unicode является каноническим представлением путей файловой системы.
11.1.2.3. Доступ к отдельным частям¶Accessing individual parts
Для доступа к отдельным «частям» (компонентам) пути используйте следующее свойство:
-
PurePath.parts¶ Кортеж, предоставляющий доступ к различным компонентам пути:
>>> p = PurePath('/usr/bin/python3') >>> p.parts ('/', 'usr', 'bin', 'python3') >>> p = PureWindowsPath('c:/Program Files/PSF') >>> p.parts ('c:\\', 'Program Files', 'PSF')
(обратите внимание, как диск и локальный корень объединены в одну часть)
11.1.2.4. Методы и свойства¶Methods and properties
Чистые пути предоставляют следующие методы и свойства:
-
PurePath.drive¶ Строка, представляющая букву или имя диска, если таковой имеется:
>>> PureWindowsPath('c:/Program Files/').drive 'c:' >>> PureWindowsPath('/Program Files/').drive '' >>> PurePosixPath('/etc').drive ''
UNC-ресурсы также считаются дисками:
>>> PureWindowsPath('//host/share/foo.txt').drive '\\\\host\\share'
-
PurePath.root¶ Строка, представляющая (локальный или глобальный) корень, если таковой имеется:
>>> PureWindowsPath('c:/Program Files/').root '\\' >>> PureWindowsPath('c:Program Files/').root '' >>> PurePosixPath('/etc').root '/'
UNC-ресурсы всегда имеют корень:
>>> PureWindowsPath('//host/share').root '\\'
-
PurePath.anchor¶ Объединение диска и корневого каталога:
>>> PureWindowsPath('c:/Program Files/').anchor 'c:\\' >>> PureWindowsPath('c:Program Files/').anchor 'c:' >>> PurePosixPath('/etc').anchor '/' >>> PureWindowsPath('//host/share').anchor '\\\\host\\share\\'
-
PurePath.parents¶ Неизменяемая последовательность, обеспечивающая доступ к логическим предкам пути:
>>> p = PureWindowsPath('c:/foo/bar/setup.py') >>> p.parents[0] PureWindowsPath('c:/foo/bar') >>> p.parents[1] PureWindowsPath('c:/foo') >>> p.parents[2] PureWindowsPath('c:/')
-
PurePath.parent¶ Логический родитель пути:
>>> p = PurePosixPath('/a/b/c/d') >>> p.parent PurePosixPath('/a/b/c')
Нельзя выйти за пределы anchor или пустого пути:
>>> p = PurePosixPath('/') >>> p.parent PurePosixPath('/') >>> p = PurePosixPath('.') >>> p.parent PurePosixPath('.')
Примечание
Это чисто лексическая операция, поэтому поведение следующее:
>>> p = PurePosixPath('foo/..') >>> p.parent PurePosixPath('foo')
Если нужно подняться вверх по произвольному пути файловой системы, рекомендуется сначала вызвать
Path.resolve(), чтобы разрешить символические ссылки и убрать компоненты “..”.
-
PurePath.name¶ Строка, представляющая последний компонент пути, исключая диск и корневой каталог (если они есть):
>>> PurePosixPath('my/library/setup.py').name 'setup.py'
UNC-имена дисков не учитываются:
>>> PureWindowsPath('//some/share/setup.py').name 'setup.py' >>> PureWindowsPath('//some/share').name ''
-
PurePath.suffix¶ Расширение файла последнего компонента, если таковое имеется:
>>> PurePosixPath('my/library/setup.py').suffix '.py' >>> PurePosixPath('my/library.tar.gz').suffix '.gz' >>> PurePosixPath('my/library').suffix ''
-
PurePath.suffixes¶ Список расширений файлов пути:
>>> PurePosixPath('my/library.tar.gar').suffixes ['.tar', '.gar'] >>> PurePosixPath('my/library.tar.gz').suffixes ['.tar', '.gz'] >>> PurePosixPath('my/library').suffixes []
-
PurePath.stem¶ Последний компонент пути без суффикса:
>>> PurePosixPath('my/library.tar.gz').stem 'library.tar' >>> PurePosixPath('my/library.tar').stem 'library' >>> PurePosixPath('my/library').stem 'library'
-
PurePath.as_posix()¶ Возвращает строковое представление пути с прямыми слэшами (
/):>>> p = PureWindowsPath('c:\\windows') >>> str(p) 'c:\\windows' >>> p.as_posix() 'c:/windows'
-
PurePath.as_uri()¶ Представляет путь в виде
fileURI.ValueErrorвозбуждается, если путь не является абсолютным.>>> p = PurePosixPath('/etc/passwd') >>> p.as_uri() 'file:///etc/passwd' >>> p = PureWindowsPath('c:/Windows') >>> p.as_uri() 'file:///c:/Windows'
-
PurePath.is_absolute()¶ Возвращает, является ли путь абсолютным. Путь считается абсолютным, если у него есть и корень, и (если это допускает разновидность) диск:
>>> PurePosixPath('/a/b').is_absolute() True >>> PurePosixPath('a/b').is_absolute() False >>> PureWindowsPath('c:/a/b').is_absolute() True >>> PureWindowsPath('/a/b').is_absolute() False >>> PureWindowsPath('c:').is_absolute() False >>> PureWindowsPath('//some/share').is_absolute() True
-
PurePath.is_reserved()¶ С
PureWindowsPathвозвращаетTrue, если путь считается зарезервированным в Windows, иначеFalse. СPurePosixPathвсегда возвращаетсяFalse.>>> PureWindowsPath('nul').is_reserved() True >>> PurePosixPath('nul').is_reserved() False
Вызовы файловой системы для зарезервированных путей могут приводить к неожиданным ошибкам или непредвиденным последствиям.
-
PurePath.joinpath(*other)¶ Вызов этого метода эквивалентен последовательному объединению пути с каждым из аргументов other:
>>> PurePosixPath('/etc').joinpath('passwd') PurePosixPath('/etc/passwd') >>> PurePosixPath('/etc').joinpath(PurePosixPath('passwd')) PurePosixPath('/etc/passwd') >>> PurePosixPath('/etc').joinpath('init.d', 'apache2') PurePosixPath('/etc/init.d/apache2') >>> PureWindowsPath('c:').joinpath('/Program Files') PureWindowsPath('c:/Program Files')
-
PurePath.match(pattern)¶ Сопоставляет этот путь с предоставленным шаблоном в стиле glob. Возвращает
Trueв случае успешного сопоставления, иначеFalse.Если pattern является относительным, путь может быть как относительным, так и абсолютным, и сопоставление выполняется с правого конца:
>>> PurePath('a/b.py').match('*.py') True >>> PurePath('/a/b/c.py').match('b/*.py') True >>> PurePath('/a/b/c.py').match('a/*.py') False
Если pattern является абсолютным, путь должен быть абсолютным, и должен совпадать весь путь:
>>> PurePath('/a.py').match('/*.py') True >>> PurePath('a/b.py').match('/*.py') False
Как и в случае с другими методами, учитывается регистр символов:
>>> PureWindowsPath('b.py').match('*.PY') True
-
PurePath.relative_to(*other)¶ Вычисляет версию этого пути относительно пути, представленного other. Если это невозможно, возбуждается ValueError:
>>> p = PurePosixPath('/etc/passwd') >>> p.relative_to('/') PurePosixPath('etc/passwd') >>> p.relative_to('/etc') PurePosixPath('passwd') >>> p.relative_to('/usr') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "pathlib.py", line 694, in relative_to .format(str(self), str(formatted))) ValueError: '/etc/passwd' does not start with '/usr'
-
PurePath.with_name(name)¶ Возвращает новый путь с изменённым
name. Если у исходного пути нет имени, вызывается ValueError:>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz') >>> p.with_name('setup.py') PureWindowsPath('c:/Downloads/setup.py') >>> p = PureWindowsPath('c:/') >>> p.with_name('setup.py') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/antoine/cpython/default/Lib/pathlib.py", line 751, in with_name raise ValueError("%r has an empty name" % (self,)) ValueError: PureWindowsPath('c:/') has an empty name
-
PurePath.with_suffix(suffix)¶ Возвращает новый путь с изменённым
suffix. Если исходный путь не имеет суффикса, вместо него добавляется новый суффикс:>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz') >>> p.with_suffix('.bz2') PureWindowsPath('c:/Downloads/pathlib.tar.bz2') >>> p = PureWindowsPath('README') >>> p.with_suffix('.txt') PureWindowsPath('README.txt')
11.1.3. Конкретные пути¶Concrete paths
Конкретные пути – это подклассы чистых классов путей. В дополнение к операциям, предоставляемым последними, они также предоставляют методы для выполнения системных вызовов над объектами путей. Есть три способа создания конкретных путей:
-
class
pathlib.Path(*pathsegments)¶ Подкласс
PurePath; этот класс представляет конкретные пути, соответствующие flavour данной файловой системы (при создании экземпляра создаётся либоPosixPath, либоWindowsPath):>>> Path('setup.py') PosixPath('setup.py')
Параметр pathsegments задаётся так же, как
PurePath.
-
class
pathlib.PosixPath(*pathsegments)¶ Подкласс
PathиPurePosixPath; этот класс представляет конкретные пути для файловых систем, отличных от Windows:>>> PosixPath('/etc') PosixPath('/etc')
Параметр pathsegments задаётся так же, как
PurePath.
-
class
pathlib.WindowsPath(*pathsegments)¶ Подкласс
PathиPureWindowsPath; этот класс представляет конкретные пути файловой системы Windows:>>> WindowsPath('c:/Program Files/') WindowsPath('c:/Program Files')
Параметр pathsegments задаётся так же, как
PurePath.
Можно создать экземпляр только того flavour класса, который соответствует системе (использование системных вызовов для несовместимых flavour путей может привести к ошибкам или сбоям в приложении):
>>> import os
>>> os.name
'posix'
>>> Path('setup.py')
PosixPath('setup.py')
>>> PosixPath('setup.py')
PosixPath('setup.py')
>>> WindowsPath('setup.py')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pathlib.py", line 798, in __new__
% (cls.__name__,))
NotImplementedError: cannot instantiate 'WindowsPath' on your system
11.1.3.1. Методы¶Methods
Конкретные пути предоставляют следующие методы в дополнение к методам чистых путей
методы. Многие из этих методов могут вызвать OSError, если системный
вызов завершится неудачей (например, потому что путь не существует):
-
classmethod
Path.cwd()¶ Возвращает новый объект пути, представляющий текущий каталог (как возвращается
os.getcwd()):>>> Path.cwd() PosixPath('/home/antoine/pathlib')
-
classmethod
Path.home()¶ Возвращает новый объект пути, представляющий домашний каталог пользователя (как возвращается
os.path.expanduser()с конструкцией~):>>> Path.home() PosixPath('/home/antoine')
Новое в версии 3.5.
-
Path.stat()¶ Возвращает информацию об этом пути (аналогично
os.stat()). Результат запрашивается при каждом вызове этого метода.>>> p = Path('setup.py') >>> p.stat().st_size 956 >>> p.stat().st_mtime 1327883547.852554
-
Path.chmod(mode)¶ Изменяет режим файла и права доступа, как
os.chmod():>>> p = Path('setup.py') >>> p.stat().st_mode 33277 >>> p.chmod(0o444) >>> p.stat().st_mode 33060
-
Path.exists()¶ Указывает ли путь на существующий файл или каталог:
>>> Path('.').exists() True >>> Path('setup.py').exists() True >>> Path('/etc').exists() True >>> Path('nonexistentfile').exists() False
Примечание
Если путь указывает на символическую ссылку,
exists()возвращает, указывает ли симлинк на существующий файл или каталог.
-
Path.expanduser()¶ Возвращает новый путь с развёрнутыми конструкциями
~и~user, как возвращается функциейos.path.expanduser():>>> p = PosixPath('~/films/Monty Python') >>> p.expanduser() PosixPath('/home/eric/films/Monty Python')
Новое в версии 3.5.
-
Path.glob(pattern)¶ Выполняет поиск по заданному шаблону в каталоге, представленном этим путём, возвращая все соответствующие файлы (любого типа):
>>> sorted(Path('.').glob('*.py')) [PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')] >>> sorted(Path('.').glob('*/*.py')) [PosixPath('docs/conf.py')]
Шаблон «
**» означает «этот каталог и все его подкаталоги рекурсивно». Другими словами, он включает рекурсивный поиск по шаблону:>>> sorted(Path('.').glob('**/*.py')) [PosixPath('build/lib/pathlib.py'), PosixPath('docs/conf.py'), PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')]
Примечание
Использование шаблона «
**» в больших деревьях каталогов может занять чрезмерно много времени.
-
Path.group()¶ Возвращает имя группы-владельца файла.
KeyErrorвызывается, если gid файла не найден в системной базе данных.
-
Path.is_dir()¶ Возвращает
True, если путь указывает на каталог (или символическую ссылку на каталог), иFalse, если указывает на файл другого типа.Falseтакже возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.
-
Path.is_file()¶ Возвращает
True, если путь указывает на обычный файл (или символическую ссылку на обычный файл), иFalse, если указывает на файл другого типа.Falseтакже возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.
-
Path.is_symlink()¶ Возвращает
True, если путь указывает на символическую ссылку, иначеFalse.Falseтакже возвращается, если путь не существует; другие ошибки (например, ошибки прав доступа) передаются дальше.
-
Path.is_socket()¶ Возвращает
True, если путь указывает на сокет Unix (или на символическую ссылку, указывающую на сокет Unix),Falseесли он указывает на файл другого типа.Falseтакже возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.
-
Path.is_fifo()¶ Возвращает
True, если путь указывает на FIFO (или на символическую ссылку, указывающую на FIFO),Falseесли он указывает на файл другого типа.Falseтакже возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.
-
Path.is_block_device()¶ Возвращает
True, если путь указывает на блочное устройство (или на символическую ссылку, указывающую на блочное устройство),Falseесли он указывает на файл другого типа.Falseтакже возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.
-
Path.is_char_device()¶ Возвращает
True, если путь указывает на символьное устройство (или на символическую ссылку, указывающую на символьное устройство),Falseесли он указывает на файл другого типа.Falseтакже возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.
-
Path.iterdir()¶ Если путь указывает на каталог, возвращает объекты пути для его содержимого:
>>> p = Path('docs') >>> for child in p.iterdir(): child ... PosixPath('docs/conf.py') PosixPath('docs/_templates') PosixPath('docs/make.bat') PosixPath('docs/index.rst') PosixPath('docs/_build') PosixPath('docs/_static') PosixPath('docs/Makefile')
-
Path.lchmod(mode)¶ Как
Path.chmod(), но если путь указывает на символьную ссылку, то изменяется режим самой символьной ссылки, а не её цели.
-
Path.lstat()¶ Как
Path.stat(), но если путь указывает на симлинк, возвращает информацию о симлинке, а не о его цели.
-
Path.mkdir(mode=0o777, parents=False, exist_ok=False)¶ Создаёт новый каталог по указанному пути. Если указан параметр mode, он комбинируется со значением
umaskпроцесса для определения режима файла и флагов доступа. Если путь уже существует,FileExistsErrorвызывается.Если parents равен true, любые отсутствующие родительские каталоги этого пути создаются по мере необходимости; они создаются с правами по умолчанию без учёта mode (имитируя команду POSIX
mkdir -p).Если parents равен false (по умолчанию), отсутствие родительского каталога вызывает
FileNotFoundError.Если exist_ok равен false (по умолчанию),
FileExistsErrorвозбуждается, если целевой каталог уже существует.Если exist_ok имеет значение true,
FileExistsErrorисключения будут проигнорированы (аналогично поведению команды POSIXmkdir -p), но только если последний компонент пути не является существующим файлом, отличным от каталога.Изменено в версии 3.5: Добавлен параметр exist_ok.
-
Path.open(mode='r', buffering=-1, encoding=None, errors=None, newline=None)¶ Открывает файл, на который указывает путь, как это делает встроенная функция
open():>>> p = Path('setup.py') >>> with p.open() as f: ... f.readline() ... '#!/usr/bin/env python3\n'
-
Path.owner()¶ Возвращает имя пользователя-владельца файла.
KeyErrorвызывается, если uid файла не найден в системной базе данных.
-
Path.read_bytes()¶ Возвращает двоичное содержимое файла, на который указывает путь, в виде объекта bytes:
>>> p = Path('my_binary_file') >>> p.write_bytes(b'Binary file contents') 20 >>> p.read_bytes() b'Binary file contents'
Новое в версии 3.5.
-
Path.read_text(encoding=None, errors=None)¶ Возвращает декодированное содержимое файла, на который указывает путь, в виде строки:
>>> p = Path('my_text_file') >>> p.write_text('Text file contents') 18 >>> p.read_text() 'Text file contents'
Необязательные параметры имеют то же значение, что и в
open().Новое в версии 3.5.
-
Path.rename(target)¶ Переименовывает этот файл или каталог в указанный target. В Unix, если target существует и является файлом, он будет бесшумно заменён, если у пользователя есть соответствующие права. target может быть как строкой, так и другим объектом пути:
>>> p = Path('foo') >>> p.open('w').write('some text') 9 >>> target = Path('bar') >>> p.rename(target) >>> target.open().read() 'some text'
-
Path.replace(target)¶ Переименовывает этот файл или каталог в указанный target. Если target указывает на существующий файл или каталог, он будет безусловно заменён.
-
Path.resolve()¶ Делает путь абсолютным, разрешая все символические ссылки. Возвращается новый объект пути:
>>> p = Path() >>> p PosixPath('.') >>> p.resolve() PosixPath('/home/antoine/pathlib')
“
..” компоненты также удаляются (это единственный метод, который это делает):>>> p = Path('docs/../setup.py') >>> p.resolve() PosixPath('/home/antoine/pathlib/setup.py')
Если путь не существует, возбуждается
FileNotFoundError. Если при разрешении пути встречается бесконечный цикл, возбуждаетсяRuntimeError.
-
Path.rglob(pattern)¶ Это похоже на вызов
Path.glob()с добавлением “**” перед заданным шаблоном:>>> sorted(Path().rglob("*.py")) [PosixPath('build/lib/pathlib.py'), PosixPath('docs/conf.py'), PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')]
-
Path.rmdir()¶ Удаляет этот каталог. Каталог должен быть пустым.
-
Path.samefile(other_path)¶ Возвращает, указывает ли этот путь на тот же файл, что и other_path, который может быть как объектом Path, так и строкой. Семантика аналогична
os.path.samefile()иos.path.samestat().Исключение
OSErrorможет быть возбуждено, если какой-либо из файлов недоступен по какой-либо причине.>>> p = Path('spam') >>> q = Path('eggs') >>> p.samefile(q) False >>> p.samefile('spam') True
Новое в версии 3.5.
-
Path.symlink_to(target, target_is_directory=False)¶ Сделать этот путь символической ссылкой на target. В Windows target_is_directory должно иметь значение true (по умолчанию
False), если цель ссылки является каталогом. В POSIX значение target_is_directory игнорируется.>>> p = Path('mylink') >>> p.symlink_to('setup.py') >>> p.resolve() PosixPath('/home/antoine/pathlib/setup.py') >>> p.stat().st_size 956 >>> p.lstat().st_size 8
Примечание
Порядок аргументов (ссылка, цель) обратный по сравнению с
os.symlink().
-
Path.touch(mode=0o666, exist_ok=True)¶ Создаёт файл по указанному пути. Если задан mode, он комбинируется со значением
umaskпроцесса для определения режима файла и флагов доступа. Если файл уже существует, функция завершается успешно, если exist_ok равен true (при этом время изменения файла обновляется до текущего), в противном случае вызывается исключениеFileExistsError.
-
Path.unlink()¶ Удаляет этот файл или символическую ссылку. Если путь указывает на каталог, используйте
Path.rmdir().
-
Path.write_bytes(data)¶ Открывает файл в байтовом режиме, записывает в него data и закрывает файл:
>>> p = Path('my_binary_file') >>> p.write_bytes(b'Binary file contents') 20 >>> p.read_bytes() b'Binary file contents'
Существующий файл с таким же именем перезаписывается.
Новое в версии 3.5.
-
Path.write_text(data, encoding=None, errors=None)¶ Открывает файл в текстовом режиме, записывает в него data и закрывает файл:
>>> p = Path('my_text_file') >>> p.write_text('Text file contents') 18 >>> p.read_text() 'Text file contents'
Новое в версии 3.5.