pathlib — Объектно-ориентированные пути файловой системы

Добавлено в версии 3.4.

Исходный код: Lib/pathlib.py


Модуль предлагает классы, представляющие пути файловой системы с семантикой, подходящей для различных операционных систем. Классы путей разделяются между чистыми путями, которые обеспечивают чисто вычислительные операции без I/O, и конкретные пути, которые наследуются от чистых путей, но также обеспечивают операции I/O.

../_images/pathlib-inheritance.png

Если вы никогда не имеете используемый этот модуль прежде или просто не уверены, какой класс правильный для вашей задачи, Path наиболее вероятен, в чем вы нуждаетесь. Это иллюстрирует примерами конкретного пути для платформы, код продолжается.

Чистые пути полезны в некоторых особых случаях; например:

  1. Если требуется управлять путями Windows на компьютере Unix (или наоборот). Невозможно создать экземпляр WindowsPath при работе в Unix, но можно создать экземпляр PureWindowsPath.
  2. Вы хотите убедиться, что ваш код манипулирует только путями без фактического доступа к ОС. В этом случае создание экземпляра одного из чистых классов может быть полезно, так как у них просто нет операций доступа к ОС.

См.также

PEP 428: модуль pathlib – объектно-ориентированные пути файловой системы.

См.также

Для низкоуровневой манипуляции путями на строками вы можете также использовать модуль os.path.

Основное использование

Импорт основного класса:

>>> 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'

Чистые пути

Объекты чистого пути обеспечивают операции обработки путей, которые фактически не имеют доступа к файловой системе. Существует три способа доступа к этим классам, которые мы также называем flavours:

class pathlib.PurePath(*pathsegments)

Универсальный класс, представляющий стиль пути системы (при создании экземпляра создается либо PurePosixPath, либо PureWindowsPath):

>>> PurePath('setup.py')      # Работает на Unix-машине
PurePosixPath('setup.py')

Каждый элемент pathsegments может быть либо строка, представляющим сегмент пути, объект, реализующий интерфейс os.PathLike, который возвращает строку или другой объект пути:

>>> 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 является символической ссылкой на другой каталог)

Объекты чистого пути реализуют интерфейс os.PathLike, позволяя используемый их в любом месте, где принят интерфейс.

Изменено в версии 3.6: Добавлена поддержка интерфейса os.PathLike.

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.

Независимо от системы, на которой вы работаете, вы можете создать экземпляр всех этих классов, так как они не обеспечивают никакой операции, выполняющей системные вызовы.

Общие свойства

Пути являются неизменяемыми и хэшируемыми. Пути одного и того же вкуса сопоставимы и упорядочены. Эти свойства относятся к семантике складывания корпуса (case-folding) аромата:

>>> 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: '<' not supported between instances of 'PureWindowsPath' and 'PurePosixPath'

Операторы

Оператор косой черты помогает создавать дочерние пути аналогично 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')

Объект пути может быть используемый где угодно, объект, осуществляющий os.PathLike, принят:

>>> import os
>>> p = PurePath('/etc')
>>> os.fspath(p)
'/etc'

Представление строка пути - сам сырой путь файловой системы (в родной форме, например, с обратными косыми чертами в соответствии с Windows), который вы можете передать к любой функции, берущей путь к файлу в качестве строка:

>>> p = PurePath('/etc')
>>> str(p)
'/etc'
>>> p = PureWindowsPath('c:/Program Files')
>>> str(p)
'c:\\Program Files'

Точно так же запрос bytes на пути дает сырой путь файловой системы как объект байтов как кодированный os.fsencode():

>>> bytes(p)
b'/etc'

Примечание

Вызов bytes рекомендуется только в Unix. В Windows форма юникод является каноническим представлением путей файловой системы.

Доступ к отдельным частям

Для доступа к отдельным «частям» (компонентам) пути используйте следующее свойство:

PurePath.parts

Кортеж, дающий доступ к различным компонентам пути:

>>> p = PurePath('/usr/bin/python3')
>>> p.parts
('/', 'usr', 'bin', 'python3')

>>> p = PureWindowsPath('c:/Program Files/PSF')
>>> p.parts
('c:\\', 'Program Files', 'PSF')

(отметьте, как двигатель и корень локальная перегруппированы в единственной части)

Методы и свойства

Чистые пути предоставляют следующие методы и свойства:

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')

Нельзя пройти мимо якоря или пустого пути:

>>> p = PurePosixPath('/')
>>> p.parent
PurePosixPath('/')
>>> p = PurePosixPath('.')
>>> p.parent
PurePosixPath('.')

Примечание

Это чисто лексическая операция, следовательно, следующее поведение:

>>> p = PurePosixPath('foo/..')
>>> p.parent
PurePosixPath('foo')

Если вы хотите пройти произвольный путь файловой системы вверх, рекомендуется сначала вызвать Path.resolve(), чтобы разрешить symlinks и исключить компоненты „.. «“.

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()

Представить путь как URI file. 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)

Соответствуйте этому пути против обеспеченного образца стиля шарика. Возвращает 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

Как и в других методах, чувствительность к регистру соответствует параметрам платформы по умолчанию:

>>> PurePosixPath('b.py').match('*.PY')
False
>>> PureWindowsPath('b.py').match('*.PY')
True
PurePath.relative_to(*other)

Вычислите версию этого пути относительно пути, представленного как other. Если это невозможно, то возникает сообщение CreateError:

>>> 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. Если исходный путь не имеет имени, то возникает сообщение CreateError:

>>> 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. Если на оригинальном пути нет суффикса, новый 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')
>>> p = PureWindowsPath('README.txt')
>>> p.with_suffix('')
PureWindowsPath('README')

Конкретные пути

Конкретные пути - подклассы чистых классов пути. В дополнение к операциям, предоставляемым последними, они также предоставляют способы выполнения системных вызовов объектов тракта. Существует три способа создания экземпляра конкретных путей:

class pathlib.Path(*pathsegments)

Подкласс PurePath, этот класс представляет конкретные пути аромата пути системы (создание экземпляра создает либо 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.

Можно создать экземпляр только того вкуса класса, который соответствует вашей системе (разрешение системных вызовов по несовместимым ароматам пути может привести к ошибкам или сбоям в приложении):

>>> 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

Методы

В дополнение к чистым путям конкретные пути обеспечивают следующие методы. Многие из этих методов могут поднять OSError, если системный вызов терпит неудачу (например, потому что путь не существует).

Изменено в версии 3.8: exists(), is_dir(), is_file(), is_mount(), is_symlink(), is_block_device(), is_char_device(), is_fifo(), is_socket() теперь возвращает False вместо того, чтобы поднять исключение для путей, которые содержат знаки, unrepresentable на уровне ОС.

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_result, содержащий информацию об этом пути, например 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)

Glob данный относительно pattern в справочнике, представленном этим путем, приводя ко всему соответствию файлам (любого вида):

>>> sorted(Path('.').glob('*.py'))
[PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')]
>>> sorted(Path('.').glob('*/*.py'))
[PosixPath('docs/conf.py')]

Шаблон «**» означает «этот каталог и все подкаталоги рекурсивно». Другими словами, она обеспечивает рекурсивный глоббинг (globbing):

>>> 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_mount()

Возвращает True если путь является mount point: точкой в файловой системе, где установлена другая файловая система. На POSIX функция проверяет, является ли родитель path, path/.., на другом устройстве, чем path, или указывают ли path/.. и path на тот же i-узел на том же устройстве —, это должно обнаружить точки монтирования для всего Unix и вариантов POSIX. Не реализована в Windows.

Добавлено в версии 3.7.

Возвращает 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()

Когда путь указывает на каталог, yield объекты пути содержимого каталога:

>>> 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 верен, любые пропавшие родители этого пути созданы по мере необходимости; они созданы с разрешений по умолчанию, не принимая mode во внимание (подражающий команде POSIX mkdir -p).

Если parents имеет значение false (значение по умолчанию), отсутствующий родитель вызывает FileNotFoundError.

Если exist_ok имеет значение false (значение по умолчанию), то FileExistsError возникает, если целевой каталог уже существует.

Если exist_ok будет верен, то исключения FileExistsError будут проигнорированы (то же поведение как команда POSIX mkdir -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()

Возвращает двоичное содержимое указанного файла в виде байтового объекта:

>>> 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 и возвращает новый путь сущность, указывающий на target. На Unix, если target существует и является файлом, он будет заменен тихо, если у пользователя будет разрешение. target может быть или строка или другим объектом пути:

>>> p = Path('foo')
>>> p.open('w').write('some text')
9
>>> target = Path('bar')
>>> p.rename(target)
PosixPath('bar')
>>> target.open().read()
'some text'

Целевой путь может быть абсолютным или относительным. Относительные пути интерпретируются относительно текущего рабочего каталога, а не каталога объекта Path.

Изменено в версии 3.8: Добавлено возвращаемое значение, возвращает новую сущность пути.

Path.replace(target)

Переименовать этот файл или папку к данному target и возвращает новый путь сущность, указывающий на target. Если target указывает на существующий файл или каталог, он будет безоговорочно заменен.

Целевой путь может быть абсолютным или относительным. Относительные пути интерпретируются относительно текущего рабочего каталога, а не каталога объекта Path.

Изменено в версии 3.8: Добавлено возвращает значение, возвращает новый путь сущность.

Path.resolve(strict=False)

Сделать путь абсолютным, разрешая любые ссылки. Новый объект пути является возвращенный:

>>> p = Path()
>>> p
PosixPath('.')
>>> p.resolve()
PosixPath('/home/antoine/pathlib')

Компоненты «..» также исключаются (это единственный метод для этого):

>>> p = Path('docs/../setup.py')
>>> p.resolve()
PosixPath('/home/antoine/pathlib/setup.py')

Если путь не существует, а strict является True, то FileNotFoundError поднимается. Если strict является False, путь разрешается по мере возможности, и любой остаток добавляется, не проверяя, существует ли он. Если с бесконечным циклом сталкиваются вдоль пути резолюции, RuntimeError поднят.

Добавлено в версии 3.6: Аргумент strict (поведение до 3.6 строго).

Path.rglob(pattern)

Это похоже на вызов Path.glob() с добавлением «**/» перед данным относительным pattern:

>>> 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.

Сделать этот путь символической ссылкой на 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 верен (и его время модификации обновлено к текущему времени), иначе FileExistsError поднят.

Удалить этот файл или символическую ссылку. Если путь указывает на каталог, используйте команду Path.rmdir().

Если missing_ok имеет значение false (значение по умолчанию), то FileNotFoundError возникает, если путь не существует.

Если missing_ok будет верен, то исключения FileNotFoundError будут проигнорированы (то же поведение как команда POSIX rm -f).

Изменено в версии 3.8: Добавлен параметр missing_ok.

Создать жесткую связь, указывающую на путь с именем target.

Добавлено в версии 3.8.

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'

Существующий файл с таким именем перезаписывается. Необязательные параметры имеют то же значение, что и в open().

Добавлено в версии 3.5.

Соответствие инструментам модуля os

Ниже приведена таблица, отображающая различные функции os на их соответствующий эквивалент PurePath/Path.

Примечание

Хотя os.path.relpath() и PurePath.relative_to() имеют некоторые перекрывающиеся случаи использования, их семантика достаточно различна, чтобы гарантировать, что не считают их эквивалентными.

os и os.path pathlib
os.path.abspath() Path.resolve()
os.chmod() Path.chmod()
os.mkdir() Path.mkdir()
os.rename() Path.rename()
os.replace() Path.replace()
os.rmdir() Path.rmdir()
os.remove(), os.unlink() Path.unlink()
os.getcwd() Path.cwd()
os.path.exists() Path.exists()
os.path.expanduser() Path.expanduser() and Path.home()
os.listdir() Path.iterdir()
os.path.isdir() Path.is_dir()
os.path.isfile() Path.is_file()
os.path.islink() Path.is_symlink()
os.link() Path.link_to()
os.symlink() Path.symlink_to()
os.stat() Path.stat(), Path.owner(), Path.group()
os.path.isabs() PurePath.is_absolute()
os.path.join() PurePath.joinpath()
os.path.basename() PurePath.name
os.path.dirname() PurePath.parent
os.path.samefile() Path.samefile()
os.path.splitext() PurePath.suffix