Spec-Zone.ru › Python 3.9

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

Новая в версии 3.4.

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

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

../_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'

Чистые пути

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

class pathlib.PurePath(*pathsegments)

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

>>> PurePath('setup.py')      # Running on a Unix machine
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.

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

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

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

>>> 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 каноническим представлением путей к файловой системе является строка Unicode.

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

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

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

Общей ресурс также считается диском:

>>> PureWindowsPath('//host/share/foo.txt').drive
'\\\\host\\share'
PurePath.root

Строка, представляющая корень (локальный или глобальный), если таковой имеется:

>>> PureWindowsPath('c:/Program Files/').root
'\\'
>>> PureWindowsPath('c:Program Files/').root
''
>>> PurePosixPath('/etc').root
'/'

Общий ресурс всегда имеет корень:

>>> 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(), чтобы разрешить символические ссылки и устранить “..” компоненты.

PurePath.name

Строка, представляющая конечный компонент пути, исключая диск и корень, если они есть:

>>> PurePosixPath('my/library/setup.py').name
'setup.py'

Имена общих ресурсов диска не учитываются:

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

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

Возвращает, является ли данный путь относительным к пути other.

>>> p = PurePath('/etc/passwd')
>>> p.is_relative_to('/etc')
True
>>> p.is_relative_to('/usr')
False

Введено в версии 3.9.

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 в противном случае.

Если шаблон относительный, путь может быть относительным или абсолютным, и сопоставление выполняется справа:

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

Если шаблон абсолютный, путь должен быть абсолютным, и весь путь должен совпасть:

>>> 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. Если это невозможно, возникает 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' is not in the subpath of '/usr' OR one path is relative and the other absolute.

ПРИМЕЧАНИЕ: Эта функция является частью PurePath и работает со строками. Она не проверяет и не получает доступ к базовой файловой структуре.

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

Возвращает новый путь с изменённым stem. Если у исходного пути нет имени, возникает ValueError:

>>> p = PureWindowsPath('c:/Downloads/draft.txt')
>>> p.with_stem('final')
PureWindowsPath('c:/Downloads/final.txt')
>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')
>>> p.with_stem('lib')
PureWindowsPath('c:/Downloads/lib.gz')
>>> p = PureWindowsPath('c:/')
>>> p.with_stem('')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/antoine/cpython/default/Lib/pathlib.py", line 861, in with_stem
    return self.with_name(stem + self.suffix)
  File "/home/antoine/cpython/default/Lib/pathlib.py", line 851, in with_name
    raise ValueError("%r has an empty name" % (self,))
ValueError: PureWindowsPath('c:/') has an empty name

Введено в версии 3.9.

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 вместо того, чтобы генерировать исключение для путей, содержащих символы, непредставимые на уровне ОС.

classmethod Path.cwd()

Возвращает новый объект пути, представляющий текущую директорию (как возвращает os.getcwd()):

>>> Path.cwd()
PosixPath('/home/antoine/pathlib')
classmethod Path.home()

Возвращает новый объект пути, представляющий домашнюю директорию пользователя (как возвращает os.path.expanduser() с ~ конструкцией):

>>> Path.home()
PosixPath('/home/antoine')

Обратите внимание, что в отличие от os.path.expanduser(), в системах POSIX будет возбуждаться KeyError или RuntimeError, а в системах Windows — RuntimeError, если домашняя директория не может быть разрешена.

Введено в версии 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')

Обратите внимание, что в отличие от os.path.expanduser(), в системах POSIX будет возбуждаться KeyError или RuntimeError, а в системах Windows — RuntimeError, если домашняя директория не может быть разрешена.

Введено в версии 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')]

Примечание

Использование шаблона «**» в больших древовидных директориях может потребовать неоправданно много времени.

Возбуждает событие аудита auditing event pathlib.Path.glob с аргументами self, pattern.

Path.group()

Возвращает имя группы, владеющей файлом. KeyError возбуждается, если gid файла не найден в базе данных системы.

Path.is_dir()

Возвращает True , если путь указывает на директорию (или символическую ссылку, указывающую на директорию), False , если он указывает на другой тип файла.

False также возвращается, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются дальше.

Path.is_file()

Возвращает True , если путь указывает на обычный файл (или символическую ссылку, указывающую на обычный файл), False , если он указывает на другой тип файла.

False также возвращается, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются дальше.

Path.is_mount()

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

Введено в версии 3.7.

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 будут игнорироваться (то же поведение, что и у команды 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.

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

Возвращает путь, на который указывает символическая ссылка (как возвращается os.readlink()):

>>> p = Path('mylink')
>>> p.symlink_to('setup.py')
>>> p.readlink()
PosixPath('setup.py')

Введено в версии 3.9.

Path.rename(target)

Переименовать этот файл или каталог в указанное target и вернуть новый объект Path, указывающий на target. В Unix, если target существует и является файлом, он будет заменён без предупреждения, если у пользователя есть права. target может быть строкой или другим объектом path:

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

Path.replace(target)

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

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

Изменено в версии 3.8: Добавлен возвращаемый объект, возвращается новый объект Path.

Path.resolve(strict=False)

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

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

Вызывает событие аудита аудита pathlib.Path.rglob с аргументами self, pattern.

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.link_to(target)

Создать жёсткую ссылку target на этот путь.

Предупреждение

Эта функция не создаёт жёсткую ссылку target на этот путь, несмотря на указание в имени функции и аргументов. Порядок аргументов (целевой объект, ссылка) обратный Path.symlink_to(), но соответствует os.link().

Введено в версии 3.8.

Path.touch(mode=0o666, exist_ok=True)

Создать файл по данному пути. Если задан параметр mode, он объединяется со значением umask процесса, чтобы определить режим файла и флаги доступа. Если файл уже существует, функция завершается успешно, если exist_ok имеет значение True (и время его изменения обновляется до текущего времени), в противном случае возникает исключение FileExistsError.

Path.unlink(missing_ok=False)

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

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

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

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

Path.write_bytes(data)

Открыть файл в режиме bytes, записать в него 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.makedirs()

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() и 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.readlink()

Path.readlink()

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

© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/library/pathlib.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API