Документация Python неофициальный перевод

pathlib.md

1233 строк · 65.2 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.11/library/pathlib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`pathlib`](https://python-all.ru/3.11/library/pathlib.html#module-pathlib) – Объектно-ориентированные пути файловой системы89Новое в версии 3.4.1011**Исходный код:** [Lib/pathlib.py](https://python-all.ru/src/3.11/Lib/pathlib.py)1213---1415Этот модуль предоставляет классы, представляющие пути файловой системы с семантикой, подходящей для разных операционных систем. Классы путей делятся на [чистые пути](https://python-all.ru/3.11/library/pathlib.html#pure-paths), которые выполняют только вычислительные операции без ввода-вывода, и [конкретные пути](https://python-all.ru/3.11/library/pathlib.html#concrete-paths), которые наследуют чистые пути, но также предоставляют операции ввода-вывода.1617![../_images/pathlib-inheritance.png](https://python-all.ru/3.11/_images/pathlib-inheritance.png)1819Если вы никогда не пользовались этим модулем раньше или просто не уверены, какой класс подходит для вашей задачи, скорее всего, вам нужен [`Path`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path). Он создаёт экземпляр [конкретного пути](https://python-all.ru/3.11/library/pathlib.html#concrete-paths) для платформы, на которой выполняется код.2021Чистые пути полезны в некоторых особых случаях; например:22231. Если требуется манипулировать путями Windows на машине Unix (или наоборот). При работе на Unix нельзя создать экземпляр [`WindowsPath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.WindowsPath), но можно создать [`PureWindowsPath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PureWindowsPath).242. Если нужно, чтобы код только манипулировал путями без фактического обращения к ОС. В таком случае может быть полезно создать экземпляр одного из чистых классов, поскольку они просто не имеют операций доступа к ОС.2526> **См. также**27>28> [**PEP 428**](https://python-all.ru/3.11/library/pathlib.html): модуль pathlib – объектно-ориентированные пути файловой системы.2930> **См. также**31>32> Для низкоуровневых манипуляций с путями в виде строк можно также использовать модуль [`os.path`](https://python-all.ru/3.11/library/os.path.html#module-os.path).3334## Основное использование3536Импорт основного класса:3738```python39>>> from pathlib import Path40```4142Список подкаталогов:4344```python45>>> p = Path('.')46>>> [x for x in p.iterdir() if x.is_dir()]47[PosixPath('.hg'), PosixPath('docs'), PosixPath('dist'),48 PosixPath('__pycache__'), PosixPath('build')]49```5051Список исходных файлов Python в этом дереве каталогов:5253```python54>>> list(p.glob('**/*.py'))55[PosixPath('test_pathlib.py'), PosixPath('setup.py'),56 PosixPath('pathlib.py'), PosixPath('docs/conf.py'),57 PosixPath('build/lib/pathlib.py')]58```5960Навигация по дереву каталогов:6162```python63>>> p = Path('/etc')64>>> q = p / 'init.d' / 'reboot'65>>> q66PosixPath('/etc/init.d/reboot')67>>> q.resolve()68PosixPath('/etc/rc.d/init.d/halt')69```7071Запрос свойств пути:7273```python74>>> q.exists()75True76>>> q.is_dir()77False78```7980Открытие файла:8182```python83>>> with q.open() as f: f.readline()84...85'#!/bin/bash\n'86```8788## Чистые пути8990Объекты чистых путей предоставляют операции обработки путей, которые не обращаются к файловой системе. Существует три способа доступа к этим классам, которые также называются *разновидностями*:9192#### `class pathlib.PurePath(*pathsegments)`9394Общий класс, представляющий разновидность пути системы (при создании экземпляра создаётся либо [`PurePosixPath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePosixPath), либо [`PureWindowsPath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PureWindowsPath)):9596```python97>>> PurePath('setup.py')      # Запуск на Unix-машине98PurePosixPath('setup.py')99```100101Каждый элемент *pathsegments* может быть строкой, представляющей сегмент пути, объектом, реализующим интерфейс [`os.PathLike`](https://python-all.ru/3.11/library/os.html#os.PathLike), который возвращает строку, или другим объектом пути:102103```python104>>> PurePath('foo', 'some/path', 'bar')105PurePosixPath('foo/some/path/bar')106>>> PurePath(Path('foo'), Path('bar'))107PurePosixPath('foo/bar')108```109110Когда *pathsegments* пуст, подразумевается текущий каталог:111112```python113>>> PurePath()114PurePosixPath('.')115```116117Если сегмент является абсолютным путём, все предыдущие сегменты игнорируются (как [`os.path.join()`](https://python-all.ru/3.11/library/os.path.html#os.path.join)):118119```python120>>> PurePath('/etc', '/usr', 'lib64')121PurePosixPath('/usr/lib64')122>>> PureWindowsPath('c:/Windows', 'd:bar')123PureWindowsPath('d:bar')124```125126В Windows диск не сбрасывается при обнаружении корневого относительного сегмента пути (например, `r'\foo'`):127128```python129>>> PureWindowsPath('c:/Windows', '/Program Files')130PureWindowsPath('c:/Program Files')131```132133Лишние косые черты и одиночные точки схлопываются, но двойные точки (`'..'`) и начальные двойные косые черты (`'//'`) – нет, поскольку это изменило бы значение пути по разным причинам (например, символические ссылки, UNC-пути):134135```python136>>> PurePath('foo//bar')137PurePosixPath('foo/bar')138>>> PurePath('//foo/bar')139PurePosixPath('//foo/bar')140>>> PurePath('foo/./bar')141PurePosixPath('foo/bar')142>>> PurePath('foo/../bar')143PurePosixPath('foo/../bar')144```145146(наивный подход сделал бы `PurePosixPath('foo/../bar')` эквивалентным `PurePosixPath('bar')`, что неверно, если `foo` является символической ссылкой на другой каталог)147148Объекты чистых путей реализуют интерфейс [`os.PathLike`](https://python-all.ru/3.11/library/os.html#os.PathLike), что позволяет использовать их везде, где этот интерфейс принимается.149150Изменено в версии 3.6: Добавлена поддержка интерфейса [`os.PathLike`](https://python-all.ru/3.11/library/os.html#os.PathLike).151152#### `class pathlib.PurePosixPath(*pathsegments)`153154Подкласс [`PurePath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath), эта разновидность путей представляет пути файловой системы, отличные от Windows:155156```python157>>> PurePosixPath('/etc')158PurePosixPath('/etc')159```160161Параметр *pathsegments* задаётся так же, как [`PurePath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath).162163#### `class pathlib.PureWindowsPath(*pathsegments)`164165Подкласс [`PurePath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath), эта разновидность путей представляет пути файловой системы Windows, включая [UNC-пути](https://python-all.ru/3.11/library/pathlib.html):166167```python168>>> PureWindowsPath('c:/Program Files/')169PureWindowsPath('c:/Program Files')170>>> PureWindowsPath('//server/share/file')171PureWindowsPath('//server/share/file')172```173174Параметр *pathsegments* задаётся так же, как [`PurePath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath).175176Независимо от используемой системы можно создавать экземпляры всех этих классов, поскольку они не предоставляют никаких операций, совершающих системные вызовы.177178### Общие свойства179180Пути неизменяемы и [хэшируемые](https://python-all.ru/3.11/glossary.html#term-hashable). Пути одной разновидности сравнимы и упорядочиваемы. Эти свойства учитывают семантику приведения регистра данной разновидности:181182```python183>>> PurePosixPath('foo') == PurePosixPath('FOO')184False185>>> PureWindowsPath('foo') == PureWindowsPath('FOO')186True187>>> PureWindowsPath('FOO') in { PureWindowsPath('foo') }188True189>>> PureWindowsPath('C:') < PureWindowsPath('d:')190True191```192193Пути разных разновидностей неравны и не упорядочиваются:194195```python196>>> PureWindowsPath('foo') == PurePosixPath('foo')197False198>>> PureWindowsPath('foo') < PurePosixPath('foo')199Traceback (most recent call last):200  File "<stdin>", line 1, in <module>201TypeError: '<' not supported between instances of 'PureWindowsPath' and 'PurePosixPath'202```203204### Операторы205206Оператор косой черты помогает создавать дочерние пути, например [`os.path.join()`](https://python-all.ru/3.11/library/os.path.html#os.path.join). Если аргумент является абсолютным путём, предыдущий путь игнорируется. В Windows диск не сбрасывается, если аргумент является относительным путём с корнем (например, `r'\foo'`):207208```python209>>> p = PurePath('/etc')210>>> p211PurePosixPath('/etc')212>>> p / 'init.d' / 'apache2'213PurePosixPath('/etc/init.d/apache2')214>>> q = PurePath('bin')215>>> '/usr' / q216PurePosixPath('/usr/bin')217>>> p / '/an_absolute_path'218PurePosixPath('/an_absolute_path')219>>> PureWindowsPath('c:/Windows', '/Program Files')220PureWindowsPath('c:/Program Files')221```222223Объект пути можно использовать везде, где принимается объект, реализующий [`os.PathLike`](https://python-all.ru/3.11/library/os.html#os.PathLike):224225```python226>>> import os227>>> p = PurePath('/etc')228>>> os.fspath(p)229'/etc'230```231232Строковое представление пути – это сам сырой путь файловой системы (в нативном виде, например с обратными слешами в Windows), который можно передать любой функции, принимающей путь к файлу в виде строки:233234```python235>>> p = PurePath('/etc')236>>> str(p)237'/etc'238>>> p = PureWindowsPath('c:/Program Files')239>>> str(p)240'c:\\Program Files'241```242243Аналогично, вызов [`bytes`](https://python-all.ru/3.11/library/stdtypes.html#bytes) для пути возвращает сырой путь файловой системы в виде объекта bytes, закодированный с помощью [`os.fsencode()`](https://python-all.ru/3.11/library/os.html#os.fsencode):244245```python246>>> bytes(p)247b'/etc'248```249250> **Примечание**251>252> Вызов [`bytes`](https://python-all.ru/3.11/library/stdtypes.html#bytes) рекомендуется только в Unix. В Windows форма Unicode является каноническим представлением путей файловой системы.253254### Доступ к отдельным частям255256Для доступа к отдельным «частям» (компонентам) пути используйте следующее свойство:257258#### `PurePath.parts`259260Кортеж, предоставляющий доступ к различным компонентам пути:261262```python263>>> p = PurePath('/usr/bin/python3')264>>> p.parts265('/', 'usr', 'bin', 'python3')266267>>> p = PureWindowsPath('c:/Program Files/PSF')268>>> p.parts269('c:\\', 'Program Files', 'PSF')270```271272(обратите внимание, как диск и локальный корень объединены в одну часть)273274### Методы и свойства275276Чистые пути предоставляют следующие методы и свойства:277278#### `PurePath.drive`279280Строка, представляющая букву или имя диска, если таковой имеется:281282```python283>>> PureWindowsPath('c:/Program Files/').drive284'c:'285>>> PureWindowsPath('/Program Files/').drive286''287>>> PurePosixPath('/etc').drive288''289```290291UNC-ресурсы также считаются дисками:292293```python294>>> PureWindowsPath('//host/share/foo.txt').drive295'\\\\host\\share'296```297298#### `PurePath.root`299300Строка, представляющая (локальный или глобальный) корень, если таковой имеется:301302```python303>>> PureWindowsPath('c:/Program Files/').root304'\\'305>>> PureWindowsPath('c:Program Files/').root306''307>>> PurePosixPath('/etc').root308'/'309```310311UNC-ресурсы всегда имеют корень:312313```python314>>> PureWindowsPath('//host/share').root315'\\'316```317318Если путь начинается с более чем двух последовательных слешей, [`PurePosixPath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePosixPath) схлопывает их:319320```python321>>> PurePosixPath('//etc').root322'//'323>>> PurePosixPath('///etc').root324'/'325>>> PurePosixPath('////etc').root326'/'327```328329> **Примечание**330>331> Это поведение соответствует *The Open Group Base Specifications Issue 6*, пункту [4.11 Pathname Resolution](https://python-all.ru/3.11/library/pathlib.html):332>333> *«Имя пути, начинающееся с двух последовательных слешей, может интерпретироваться способом, определяемым реализацией, хотя более двух начальных слешей должны рассматриваться как один слеш.»*334335#### `PurePath.anchor`336337Объединение диска и корневого каталога:338339```python340>>> PureWindowsPath('c:/Program Files/').anchor341'c:\\'342>>> PureWindowsPath('c:Program Files/').anchor343'c:'344>>> PurePosixPath('/etc').anchor345'/'346>>> PureWindowsPath('//host/share').anchor347'\\\\host\\share\\'348```349350#### `PurePath.parents`351352Неизменяемая последовательность, обеспечивающая доступ к логическим предкам пути:353354```python355>>> p = PureWindowsPath('c:/foo/bar/setup.py')356>>> p.parents[0]357PureWindowsPath('c:/foo/bar')358>>> p.parents[1]359PureWindowsPath('c:/foo')360>>> p.parents[2]361PureWindowsPath('c:/')362```363364Изменено в версии 3.10: Последовательность parents теперь поддерживает [срезы](https://python-all.ru/3.11/glossary.html#term-slice) и отрицательные значения индексов.365366#### `PurePath.parent`367368Логический родитель пути:369370```python371>>> p = PurePosixPath('/a/b/c/d')372>>> p.parent373PurePosixPath('/a/b/c')374```375376Нельзя выйти за пределы anchor или пустого пути:377378```python379>>> p = PurePosixPath('/')380>>> p.parent381PurePosixPath('/')382>>> p = PurePosixPath('.')383>>> p.parent384PurePosixPath('.')385```386387> **Примечание**388>389> Это чисто лексическая операция, поэтому поведение следующее:390>391> ```python392> >>> p = PurePosixPath('foo/..')393> >>> p.parent394> PurePosixPath('foo')395> ```396>397> Если нужно подняться вверх по произвольному пути файловой системы, рекомендуется сначала вызвать [`Path.resolve()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.resolve), чтобы разрешить символические ссылки и убрать компоненты `".."`.398399#### `PurePath.name`400401Строка, представляющая последний компонент пути, исключая диск и корневой каталог (если они есть):402403```python404>>> PurePosixPath('my/library/setup.py').name405'setup.py'406```407408UNC-имена дисков не учитываются:409410```python411>>> PureWindowsPath('//some/share/setup.py').name412'setup.py'413>>> PureWindowsPath('//some/share').name414''415```416417#### `PurePath.suffix`418419Расширение файла последнего компонента, если таковое имеется:420421```python422>>> PurePosixPath('my/library/setup.py').suffix423'.py'424>>> PurePosixPath('my/library.tar.gz').suffix425'.gz'426>>> PurePosixPath('my/library').suffix427''428```429430#### `PurePath.suffixes`431432Список расширений файлов пути:433434```python435>>> PurePosixPath('my/library.tar.gar').suffixes436['.tar', '.gar']437>>> PurePosixPath('my/library.tar.gz').suffixes438['.tar', '.gz']439>>> PurePosixPath('my/library').suffixes440[]441```442443#### `PurePath.stem`444445Последний компонент пути без суффикса:446447```python448>>> PurePosixPath('my/library.tar.gz').stem449'library.tar'450>>> PurePosixPath('my/library.tar').stem451'library'452>>> PurePosixPath('my/library').stem453'library'454```455456#### `PurePath.as_posix()`457458Возвращает строковое представление пути с прямыми слэшами (`/`):459460```python461>>> p = PureWindowsPath('c:\\windows')462>>> str(p)463'c:\\windows'464>>> p.as_posix()465'c:/windows'466```467468#### `PurePath.as_uri()`469470Представляет путь в виде `file` URI. [`ValueError`](https://python-all.ru/3.11/library/exceptions.html#ValueError) возбуждается, если путь не является абсолютным.471472```python473>>> p = PurePosixPath('/etc/passwd')474>>> p.as_uri()475'file:///etc/passwd'476>>> p = PureWindowsPath('c:/Windows')477>>> p.as_uri()478'file:///c:/Windows'479```480481#### `PurePath.is_absolute()`482483Возвращает, является ли путь абсолютным. Путь считается абсолютным, если у него есть и корень, и (если это допускает разновидность) диск:484485```python486>>> PurePosixPath('/a/b').is_absolute()487True488>>> PurePosixPath('a/b').is_absolute()489False490491>>> PureWindowsPath('c:/a/b').is_absolute()492True493>>> PureWindowsPath('/a/b').is_absolute()494False495>>> PureWindowsPath('c:').is_absolute()496False497>>> PureWindowsPath('//some/share').is_absolute()498True499```500501#### `PurePath.is_relative_to(*other)`502503Возвращает, является ли этот путь относительным по отношению к пути *other*.504505```python506>>> p = PurePath('/etc/passwd')507>>> p.is_relative_to('/etc')508True509>>> p.is_relative_to('/usr')510False511```512513Если передано несколько аргументов, они объединяются.514515Этот метод основан на строках; он не обращается к файловой системе и не обрабатывает сегменты “`..`” особым образом. Следующий код эквивалентен:516517```python518>>> u = PurePath('/usr')519>>> u == p or u in p.parents520False521```522523Новое в версии 3.9.524525#### `PurePath.is_reserved()`526527С [`PureWindowsPath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PureWindowsPath) возвращает `True`, если путь считается зарезервированным в Windows, иначе `False`. С [`PurePosixPath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePosixPath) всегда возвращается `False`.528529```python530>>> PureWindowsPath('nul').is_reserved()531True532>>> PurePosixPath('nul').is_reserved()533False534```535536Вызовы файловой системы для зарезервированных путей могут приводить к неожиданным ошибкам или непредвиденным последствиям.537538#### `PurePath.joinpath(*other)`539540Вызов этого метода эквивалентен последовательному объединению пути с каждым из аргументов *other*:541542```python543>>> PurePosixPath('/etc').joinpath('passwd')544PurePosixPath('/etc/passwd')545>>> PurePosixPath('/etc').joinpath(PurePosixPath('passwd'))546PurePosixPath('/etc/passwd')547>>> PurePosixPath('/etc').joinpath('init.d', 'apache2')548PurePosixPath('/etc/init.d/apache2')549>>> PureWindowsPath('c:').joinpath('/Program Files')550PureWindowsPath('c:/Program Files')551```552553#### `PurePath.match(pattern)`554555Сопоставляет этот путь с предоставленным шаблоном в стиле glob. Возвращает `True` в случае успешного сопоставления, иначе `False`.556557Если *pattern* является относительным, путь может быть как относительным, так и абсолютным, и сопоставление выполняется с правого конца:558559```python560>>> PurePath('a/b.py').match('*.py')561True562>>> PurePath('/a/b/c.py').match('b/*.py')563True564>>> PurePath('/a/b/c.py').match('a/*.py')565False566```567568Если *pattern* является абсолютным, путь должен быть абсолютным, и должен совпадать весь путь:569570```python571>>> PurePath('/a.py').match('/*.py')572True573>>> PurePath('a/b.py').match('/*.py')574False575```576577Как и в других методах, чувствительность к регистру определяется по умолчанию платформой:578579```python580>>> PurePosixPath('b.py').match('*.PY')581False582>>> PureWindowsPath('b.py').match('*.PY')583True584```585586#### `PurePath.relative_to(*other)`587588Вычисляет версию этого пути относительно пути, представленного *other*. Если это невозможно, возбуждается ValueError:589590```python591>>> p = PurePosixPath('/etc/passwd')592>>> p.relative_to('/')593PurePosixPath('etc/passwd')594>>> p.relative_to('/etc')595PurePosixPath('passwd')596>>> p.relative_to('/usr')597Traceback (most recent call last):598  File "<stdin>", line 1, in <module>599  File "pathlib.py", line 694, in relative_to600    .format(str(self), str(formatted)))601ValueError: '/etc/passwd' is not in the subpath of '/usr' OR one path is relative and the other absolute.602```603604Если передано несколько аргументов, они объединяются.605606ПРИМЕЧАНИЕ: Эта функция является частью [`PurePath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath) и работает со строками. Она не проверяет и не обращается к структуре файловой системы.607608#### `PurePath.with_name(name)`609610Возвращает новый путь с изменённым [`name`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath.name). Если у исходного пути нет имени, вызывается ValueError:611612```python613>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')614>>> p.with_name('setup.py')615PureWindowsPath('c:/Downloads/setup.py')616>>> p = PureWindowsPath('c:/')617>>> p.with_name('setup.py')618Traceback (most recent call last):619  File "<stdin>", line 1, in <module>620  File "/home/antoine/cpython/default/Lib/pathlib.py", line 751, in with_name621    raise ValueError("%r has an empty name" % (self,))622ValueError: PureWindowsPath('c:/') has an empty name623```624625#### `PurePath.with_stem(stem)`626627Возвращает новый путь с изменённым [`stem`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath.stem). Если у исходного пути нет имени, вызывается ValueError:628629```python630>>> p = PureWindowsPath('c:/Downloads/draft.txt')631>>> p.with_stem('final')632PureWindowsPath('c:/Downloads/final.txt')633>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')634>>> p.with_stem('lib')635PureWindowsPath('c:/Downloads/lib.gz')636>>> p = PureWindowsPath('c:/')637>>> p.with_stem('')638Traceback (most recent call last):639  File "<stdin>", line 1, in <module>640  File "/home/antoine/cpython/default/Lib/pathlib.py", line 861, in with_stem641    return self.with_name(stem + self.suffix)642  File "/home/antoine/cpython/default/Lib/pathlib.py", line 851, in with_name643    raise ValueError("%r has an empty name" % (self,))644ValueError: PureWindowsPath('c:/') has an empty name645```646647Новое в версии 3.9.648649#### `PurePath.with_suffix(suffix)`650651Возвращает новый путь с изменённым [`suffix`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath.suffix). Если у исходного пути нет суффикса, вместо него добавляется новый *suffix*. Если *suffix* – пустая строка, исходный суффикс удаляется:652653```python654>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')655>>> p.with_suffix('.bz2')656PureWindowsPath('c:/Downloads/pathlib.tar.bz2')657>>> p = PureWindowsPath('README')658>>> p.with_suffix('.txt')659PureWindowsPath('README.txt')660>>> p = PureWindowsPath('README.txt')661>>> p.with_suffix('')662PureWindowsPath('README')663```664665## Конкретные пути666667Конкретные пути – это подклассы чистых классов путей. В дополнение к операциям, предоставляемым последними, они также предоставляют методы для выполнения системных вызовов над объектами путей. Есть три способа создания конкретных путей:668669#### `class pathlib.Path(*pathsegments)`670671Подкласс [`PurePath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath); этот класс представляет конкретные пути, соответствующие flavour данной файловой системы (при создании экземпляра создаётся либо [`PosixPath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PosixPath), либо [`WindowsPath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.WindowsPath)):672673```python674>>> Path('setup.py')675PosixPath('setup.py')676```677678Параметр *pathsegments* задаётся так же, как [`PurePath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath).679680#### `class pathlib.PosixPath(*pathsegments)`681682Подкласс [`Path`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path) и [`PurePosixPath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePosixPath); этот класс представляет конкретные пути для файловых систем, отличных от Windows:683684```python685>>> PosixPath('/etc')686PosixPath('/etc')687```688689Параметр *pathsegments* задаётся так же, как [`PurePath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath).690691#### `class pathlib.WindowsPath(*pathsegments)`692693Подкласс [`Path`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path) и [`PureWindowsPath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PureWindowsPath); этот класс представляет конкретные пути файловой системы Windows:694695```python696>>> WindowsPath('c:/Program Files/')697WindowsPath('c:/Program Files')698```699700Параметр *pathsegments* задаётся так же, как [`PurePath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath).701702Можно создать экземпляр только того flavour класса, который соответствует системе (использование системных вызовов для несовместимых flavour путей может привести к ошибкам или сбоям в приложении):703704```python705>>> import os706>>> os.name707'posix'708>>> Path('setup.py')709PosixPath('setup.py')710>>> PosixPath('setup.py')711PosixPath('setup.py')712>>> WindowsPath('setup.py')713Traceback (most recent call last):714  File "<stdin>", line 1, in <module>715  File "pathlib.py", line 798, in __new__716    % (cls.__name__,))717NotImplementedError: cannot instantiate 'WindowsPath' on your system718```719720### Методы721722Конкретные пути предоставляют следующие методы в дополнение к методам чистых путей методы. Многие из этих методов могут вызывать [`OSError`](https://python-all.ru/3.11/library/exceptions.html#OSError), если системный вызов завершается неудачей (например, из-за того, что путь не существует).723724Изменено в версии 3.8: Методы [`exists()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.exists), [`is_dir()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.is_dir), [`is_file()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.is_file), [`is_mount()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.is_mount), [`is_symlink()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.is_symlink), [`is_block_device()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.is_block_device), [`is_char_device()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.is_char_device), [`is_fifo()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.is_fifo), [`is_socket()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.is_socket) теперь возвращают `False` вместо возбуждения исключения для путей, содержащих символы, непредставимые на уровне ОС.725726#### `classmethod Path.cwd()`727728Возвращает новый объект пути, представляющий текущий каталог (как возвращается [`os.getcwd()`](https://python-all.ru/3.11/library/os.html#os.getcwd)):729730```python731>>> Path.cwd()732PosixPath('/home/antoine/pathlib')733```734735#### `classmethod Path.home()`736737Возвращает новый объект пути, представляющий домашний каталог пользователя (как возвращается [`os.path.expanduser()`](https://python-all.ru/3.11/library/os.path.html#os.path.expanduser) с конструкцией `~`). Если домашний каталог не может быть определён, возбуждается [`RuntimeError`](https://python-all.ru/3.11/library/exceptions.html#RuntimeError).738739```python740>>> Path.home()741PosixPath('/home/antoine')742```743744Новое в версии 3.5.745746#### `Path.stat(*, follow_symlinks=True)`747748Возвращает объект [`os.stat_result`](https://python-all.ru/3.11/library/os.html#os.stat_result), содержащий информацию об этом пути, например [`os.stat()`](https://python-all.ru/3.11/library/os.html#os.stat). Результат запрашивается при каждом вызове этого метода.749750Этот метод обычно следует по симлинкам; чтобы выполнить stat для самого симлинка, добавьте аргумент `follow_symlinks=False`, или используйте [`lstat()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.lstat).751752```python753>>> p = Path('setup.py')754>>> p.stat().st_size755956756>>> p.stat().st_mtime7571327883547.852554758```759760Изменено в версии 3.10: Добавлен параметр *follow\_symlinks*.761762#### `Path.chmod(mode, *, follow_symlinks=True)`763764Изменяет режим и права доступа к файлу, как [`os.chmod()`](https://python-all.ru/3.11/library/os.html#os.chmod).765766Этот метод обычно переходит по символьным ссылкам. Некоторые варианты Unix поддерживают изменение прав доступа на самой символьной ссылке; на таких платформах можно добавить аргумент `follow_symlinks=False` или использовать [`lchmod()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.lchmod).767768```python769>>> p = Path('setup.py')770>>> p.stat().st_mode77133277772>>> p.chmod(0o444)773>>> p.stat().st_mode77433060775```776777Изменено в версии 3.10: Добавлен параметр *follow\_symlinks*.778779#### `Path.exists()`780781Указывает ли путь на существующий файл или каталог:782783```python784>>> Path('.').exists()785True786>>> Path('setup.py').exists()787True788>>> Path('/etc').exists()789True790>>> Path('nonexistentfile').exists()791False792```793794> **Примечание**795>796> Если путь указывает на символическую ссылку, [`exists()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.exists) возвращает, *указывает ли* симлинк на существующий файл или каталог.797798#### `Path.expanduser()`799800Возвращает новый путь с развёрнутыми конструкциями `~` и `~user`, как возвращается [`os.path.expanduser()`](https://python-all.ru/3.11/library/os.path.html#os.path.expanduser). Если домашний каталог не может быть определён, возбуждается [`RuntimeError`](https://python-all.ru/3.11/library/exceptions.html#RuntimeError).801802```python803>>> p = PosixPath('~/films/Monty Python')804>>> p.expanduser()805PosixPath('/home/eric/films/Monty Python')806```807808Новое в версии 3.5.809810#### `Path.glob(pattern)`811812Выполняет поиск по заданному относительному *pattern* в каталоге, представленном этим путем, возвращая все совпадающие файлы (любого типа):813814```python815>>> sorted(Path('.').glob('*.py'))816[PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')]817>>> sorted(Path('.').glob('*/*.py'))818[PosixPath('docs/conf.py')]819```820821Шаблоны такие же, как для [`fnmatch`](https://python-all.ru/3.11/library/fnmatch.html#module-fnmatch), с добавлением «`**`», что означает «этот каталог и все подкаталоги, рекурсивно». Иными словами, это включает рекурсивный поиск по шаблону:822823```python824>>> sorted(Path('.').glob('**/*.py'))825[PosixPath('build/lib/pathlib.py'),826 PosixPath('docs/conf.py'),827 PosixPath('pathlib.py'),828 PosixPath('setup.py'),829 PosixPath('test_pathlib.py')]830```831832> **Примечание**833>834> Использование шаблона «`**`» в больших деревьях каталогов может занять чрезмерно много времени.835836Возбуждает [событие аудита](https://python-all.ru/3.11/library/sys.html#auditing) `pathlib.Path.glob` с аргументами `self`, `pattern`.837838Изменено в версии 3.11: Возвращает только каталоги, если *pattern* заканчивается разделителем компонентов пути ([`sep`](https://python-all.ru/3.11/library/os.html#os.sep) или [`altsep`](https://python-all.ru/3.11/library/os.html#os.altsep)).839840#### `Path.group()`841842Возвращает имя группы-владельца файла. [`KeyError`](https://python-all.ru/3.11/library/exceptions.html#KeyError) вызывается, если gid файла не найден в системной базе данных.843844#### `Path.is_dir()`845846Возвращает `True`, если путь указывает на каталог (или символическую ссылку на каталог), и `False`, если указывает на файл другого типа.847848`False` также возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.849850#### `Path.is_file()`851852Возвращает `True`, если путь указывает на обычный файл (или символическую ссылку на обычный файл), и `False`, если указывает на файл другого типа.853854`False` также возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.855856#### `Path.is_mount()`857858Возвращает `True`, если путь является *точкой монтирования*: точкой в файловой системе, куда смонтирована другая файловая система. На POSIX функция проверяет, находится ли родительский каталог *path*, `path/..`, на другом устройстве, чем *path*, или указывают ли `path/..` и *path* на один и тот же индексный дескриптор на одном устройстве – это должно определять точки монтирования для всех вариантов Unix и POSIX. Не реализовано в Windows.859860Добавлено в версии 3.7.861862#### `Path.is_symlink()`863864Возвращает `True`, если путь указывает на символическую ссылку, иначе `False`.865866`False` также возвращается, если путь не существует; другие ошибки (например, ошибки прав доступа) передаются дальше.867868#### `Path.is_socket()`869870Возвращает `True`, если путь указывает на сокет Unix (или на символическую ссылку, указывающую на сокет Unix), `False` если он указывает на файл другого типа.871872`False` также возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.873874#### `Path.is_fifo()`875876Возвращает `True`, если путь указывает на FIFO (или на символическую ссылку, указывающую на FIFO), `False` если он указывает на файл другого типа.877878`False` также возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.879880#### `Path.is_block_device()`881882Возвращает `True`, если путь указывает на блочное устройство (или на символическую ссылку, указывающую на блочное устройство), `False` если он указывает на файл другого типа.883884`False` также возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.885886#### `Path.is_char_device()`887888Возвращает `True`, если путь указывает на символьное устройство (или на символическую ссылку, указывающую на символьное устройство), `False` если он указывает на файл другого типа.889890`False` также возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.891892#### `Path.iterdir()`893894Если путь указывает на каталог, возвращает объекты пути для его содержимого:895896```python897>>> p = Path('docs')898>>> for child in p.iterdir(): child899...900PosixPath('docs/conf.py')901PosixPath('docs/_templates')902PosixPath('docs/make.bat')903PosixPath('docs/index.rst')904PosixPath('docs/_build')905PosixPath('docs/_static')906PosixPath('docs/Makefile')907```908909Дочерние элементы возвращаются в произвольном порядке, а специальные записи `'.'` и `'..'` не включаются. Если файл удаляется из каталога или добавляется в него после создания итератора, то будет ли включён объект пути для этого файла, не определено.910911#### `Path.lchmod(mode)`912913Как [`Path.chmod()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.chmod), но если путь указывает на символьную ссылку, то изменяется режим самой символьной ссылки, а не её цели.914915#### `Path.lstat()`916917Как [`Path.stat()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.stat), но если путь указывает на симлинк, возвращает информацию о симлинке, а не о его цели.918919#### `Path.mkdir(mode=0o777, parents=False, exist_ok=False)`920921Создаёт новый каталог по указанному пути. Если указан параметр *mode*, он комбинируется со значением `umask` процесса для определения режима файла и флагов доступа. Если путь уже существует, [`FileExistsError`](https://python-all.ru/3.11/library/exceptions.html#FileExistsError) вызывается.922923Если *parents* равен true, любые отсутствующие родительские каталоги этого пути создаются по мере необходимости; они создаются с правами по умолчанию без учёта *mode* (имитируя команду POSIX `mkdir -p`).924925Если *parents* равен false (по умолчанию), отсутствие родительского каталога вызывает [`FileNotFoundError`](https://python-all.ru/3.11/library/exceptions.html#FileNotFoundError).926927Если *exist\_ok* равен false (по умолчанию), [`FileExistsError`](https://python-all.ru/3.11/library/exceptions.html#FileExistsError) возбуждается, если целевой каталог уже существует.928929Если *exist\_ok* равен true, [`FileExistsError`](https://python-all.ru/3.11/library/exceptions.html#FileExistsError) не будет возбуждаться, за исключением случая, когда указанный путь уже существует в файловой системе и не является каталогом (аналогично поведению команды POSIX `mkdir -p`).930931Изменено в версии 3.5: Добавлен параметр *exist\_ok*.932933#### `Path.open(mode='r', buffering=-1, encoding=None, errors=None, newline=None)`934935Открывает файл, на который указывает путь, как это делает встроенная функция [`open()`](https://python-all.ru/3.11/library/functions.html#open) :936937```python938>>> p = Path('setup.py')939>>> with p.open() as f:940...     f.readline()941...942'#!/usr/bin/env python3\n'943```944945#### `Path.owner()`946947Возвращает имя пользователя-владельца файла. [`KeyError`](https://python-all.ru/3.11/library/exceptions.html#KeyError) вызывается, если uid файла не найден в системной базе данных.948949#### `Path.read_bytes()`950951Возвращает двоичное содержимое файла, на который указывает путь, в виде объекта bytes:952953```python954>>> p = Path('my_binary_file')955>>> p.write_bytes(b'Binary file contents')95620957>>> p.read_bytes()958b'Binary file contents'959```960961Новое в версии 3.5.962963#### `Path.read_text(encoding=None, errors=None)`964965Возвращает декодированное содержимое файла, на который указывает путь, в виде строки:966967```python968>>> p = Path('my_text_file')969>>> p.write_text('Text file contents')97018971>>> p.read_text()972'Text file contents'973```974975Файл открывается, а затем закрывается. Необязательные параметры имеют тот же смысл, что и в [`open()`](https://python-all.ru/3.11/library/functions.html#open).976977Новое в версии 3.5.978979#### `Path.readlink()`980981Возвращает путь, на который указывает симлинк (как возвращается [`os.readlink()`](https://python-all.ru/3.11/library/os.html#os.readlink)):982983```python984>>> p = Path('mylink')985>>> p.symlink_to('setup.py')986>>> p.readlink()987PosixPath('setup.py')988```989990Новое в версии 3.9.991992#### `Path.rename(target)`993994Переименовывает этот файл или каталог в указанный *target* и возвращает новый экземпляр Path, указывающий на *target*. В Unix, если *target* существует и является файлом, он будет бесшумно заменён, если у пользователя есть права. В Windows, если *target* существует, будет вызвано исключение [`FileExistsError`](https://python-all.ru/3.11/library/exceptions.html#FileExistsError). *target* может быть строкой или другим объектом пути:995996```python997>>> p = Path('foo')998>>> p.open('w').write('some text')99991000>>> target = Path('bar')1001>>> p.rename(target)1002PosixPath('bar')1003>>> target.open().read()1004'some text'1005```10061007Целевой путь может быть абсолютным или относительным. Относительные пути интерпретируются относительно текущей рабочей директории, а *не* директории объекта Path.10081009Реализован через [`os.rename()`](https://python-all.ru/3.11/library/os.html#os.rename) и даёт те же гарантии.10101011Изменено в версии 3.8: Добавлено возвращаемое значение – теперь возвращается новый экземпляр Path.10121013#### `Path.replace(target)`10141015Переименовывает этот файл или каталог в указанный *target* и возвращает новый экземпляр Path, указывающий на *target*. Если *target* указывает на существующий файл или пустой каталог, он будет безусловно заменён.10161017Целевой путь может быть абсолютным или относительным. Относительные пути интерпретируются относительно текущей рабочей директории, а *не* директории объекта Path.10181019Изменено в версии 3.8: Добавлено возвращаемое значение – теперь возвращается новый экземпляр Path.10201021#### `Path.absolute()`10221023Делает путь абсолютным, без нормализации или разрешения симлинков. Возвращает новый объект path:10241025```python1026>>> p = Path('tests')1027>>> p1028PosixPath('tests')1029>>> p.absolute()1030PosixPath('/home/antoine/pathlib/tests')1031```10321033#### `Path.resolve(strict=False)`10341035Делает путь абсолютным, разрешая все символические ссылки. Возвращается новый объект пути:10361037```python1038>>> p = Path()1039>>> p1040PosixPath('.')1041>>> p.resolve()1042PosixPath('/home/antoine/pathlib')1043```10441045`..`” компоненты также удаляются (это единственный метод, который это делает):10461047```python1048>>> p = Path('docs/../setup.py')1049>>> p.resolve()1050PosixPath('/home/antoine/pathlib/setup.py')1051```10521053Если путь не существует и *strict* равен `True`, возникает [`FileNotFoundError`](https://python-all.ru/3.11/library/exceptions.html#FileNotFoundError). Если *strict* равен `False`, путь разрешается настолько, насколько возможно, и остаток добавляется без проверки на существование. Если во время разрешения пути встречается бесконечный цикл, возникает [`RuntimeError`](https://python-all.ru/3.11/library/exceptions.html#RuntimeError).10541055Новое в версии 3.6: Аргумент *strict* (поведение до версии 3.6 – строгое).10561057#### `Path.rglob(pattern)`10581059Это аналогично вызову [`Path.glob()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.glob) с добавлением «`**/`» перед указанным относительным *pattern*:10601061```python1062>>> sorted(Path().rglob("*.py"))1063[PosixPath('build/lib/pathlib.py'),1064 PosixPath('docs/conf.py'),1065 PosixPath('pathlib.py'),1066 PosixPath('setup.py'),1067 PosixPath('test_pathlib.py')]1068```10691070Возбуждает [событие аудита](https://python-all.ru/3.11/library/sys.html#auditing) `pathlib.Path.rglob` с аргументами `self`, `pattern`.10711072Изменено в версии 3.11: Возвращает только каталоги, если *pattern* заканчивается разделителем компонентов пути ([`sep`](https://python-all.ru/3.11/library/os.html#os.sep) или [`altsep`](https://python-all.ru/3.11/library/os.html#os.altsep)).10731074#### `Path.rmdir()`10751076Удаляет этот каталог. Каталог должен быть пустым.10771078#### `Path.samefile(other_path)`10791080Возвращает, указывает ли этот путь на тот же файл, что и *other\_path*, который может быть как объектом Path, так и строкой. Семантика аналогична [`os.path.samefile()`](https://python-all.ru/3.11/library/os.path.html#os.path.samefile) и [`os.path.samestat()`](https://python-all.ru/3.11/library/os.path.html#os.path.samestat).10811082Исключение [`OSError`](https://python-all.ru/3.11/library/exceptions.html#OSError) может быть возбуждено, если какой-либо из файлов недоступен по какой-либо причине.10831084```python1085>>> p = Path('spam')1086>>> q = Path('eggs')1087>>> p.samefile(q)1088False1089>>> p.samefile('spam')1090True1091```10921093Новое в версии 3.5.10941095#### `Path.symlink_to(target, target_is_directory=False)`10961097Делает этот путь символической ссылкой, указывающей на *target*.10981099В Windows символическая ссылка представляет собой либо файл, либо каталог и не изменяется динамически под цель. Если цель существует, тип символической ссылки будет создан соответствующим. В противном случае символическая ссылка будет создана как каталог, если *target\_is\_directory* равен `True`, или как файловая ссылка (по умолчанию) в противном случае. На платформах, отличных от Windows, параметр *target\_is\_directory* игнорируется.11001101```python1102>>> p = Path('mylink')1103>>> p.symlink_to('setup.py')1104>>> p.resolve()1105PosixPath('/home/antoine/pathlib/setup.py')1106>>> p.stat().st_size11079561108>>> p.lstat().st_size110981110```11111112> **Примечание**1113>1114> Порядок аргументов (ссылка, цель) обратный по сравнению с [`os.symlink()`](https://python-all.ru/3.11/library/os.html#os.symlink).11151116#### `Path.hardlink_to(target)`11171118Делает этот путь жёсткой ссылкой на тот же файл, что и *target*.11191120> **Примечание**1121>1122> Порядок аргументов (ссылка, цель) обратный по сравнению с [`os.link()`](https://python-all.ru/3.11/library/os.html#os.link).11231124Новое в версии 3.10.11251126#### `Path.link_to(target)`11271128Создаёт жёсткую ссылку *target* на этот путь.11291130> **Предупреждение**1131>1132> Эта функция не делает данный путь жёсткой ссылкой на *target*, вопреки тому, что подразумевают имена функции и аргументов. Порядок аргументов (target, link) обратный по сравнению с [`Path.symlink_to()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.symlink_to) и [`Path.hardlink_to()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.hardlink_to), но совпадает с [`os.link()`](https://python-all.ru/3.11/library/os.html#os.link).11331134Новое в версии 3.8.11351136Устарело с версии 3.10: Этот метод устарел в пользу [`Path.hardlink_to()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.hardlink_to), так как порядок аргументов [`Path.link_to()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.link_to) не соответствует порядку аргументов [`Path.symlink_to()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.symlink_to).11371138#### `Path.touch(mode=0o666, exist_ok=True)`11391140Создаёт файл по указанному пути. Если задан *mode*, он комбинируется со значением `umask` процесса для определения режима файла и флагов доступа. Если файл уже существует, функция завершается успешно, если *exist\_ok* равен true (при этом время изменения файла обновляется до текущего), в противном случае вызывается исключение [`FileExistsError`](https://python-all.ru/3.11/library/exceptions.html#FileExistsError).11411142#### `Path.unlink(missing_ok=False)`11431144Удаляет этот файл или символическую ссылку. Если путь указывает на каталог, используйте [`Path.rmdir()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.rmdir).11451146Если *missing\_ok* равно false (по умолчанию), [`FileNotFoundError`](https://python-all.ru/3.11/library/exceptions.html#FileNotFoundError) вызывается, если путь не существует.11471148Если *missing\_ok* равно true, исключения [`FileNotFoundError`](https://python-all.ru/3.11/library/exceptions.html#FileNotFoundError) будут игнорироваться (аналогично поведению команды POSIX `rm -f`).11491150Изменено в версии 3.8: Добавлен параметр *missing\_ok*.11511152#### `Path.write_bytes(data)`11531154Открывает файл в байтовом режиме, записывает в него *data* и закрывает файл:11551156```python1157>>> p = Path('my_binary_file')1158>>> p.write_bytes(b'Binary file contents')1159201160>>> p.read_bytes()1161b'Binary file contents'1162```11631164Существующий файл с таким же именем перезаписывается.11651166Новое в версии 3.5.11671168#### `Path.write_text(data, encoding=None, errors=None, newline=None)`11691170Открывает файл в текстовом режиме, записывает в него *data* и закрывает файл:11711172```python1173>>> p = Path('my_text_file')1174>>> p.write_text('Text file contents')1175181176>>> p.read_text()1177'Text file contents'1178```11791180Существующий файл с таким же именем перезаписывается. Необязательные параметры имеют тот же смысл, что и в [`open()`](https://python-all.ru/3.11/library/functions.html#open).11811182Новое в версии 3.5.11831184Изменено в версии 3.10: Добавлен параметр *newline*.11851186## Соответствие инструментам в модуле [`os`](https://python-all.ru/3.11/library/os.html#module-os)11871188Ниже представлена таблица, сопоставляющая различные функции [`os`](https://python-all.ru/3.11/library/os.html#module-os) с их эквивалентами в [`PurePath`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath)/[`Path`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path).11891190> **Примечание**1191>1192> Не все пары функций/методов ниже эквивалентны. Некоторые из них, несмотря на частичное совпадение областей применения, имеют разную семантику. К ним относятся [`os.path.abspath()`](https://python-all.ru/3.11/library/os.path.html#os.path.abspath) и [`Path.absolute()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.absolute), [`os.path.relpath()`](https://python-all.ru/3.11/library/os.path.html#os.path.relpath) и [`PurePath.relative_to()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath.relative_to).11931194| [`os`](https://python-all.ru/3.11/library/os.html#module-os) и [`os.path`](https://python-all.ru/3.11/library/os.path.html#module-os.path) | [`pathlib`](https://python-all.ru/3.11/library/pathlib.html#module-pathlib) |1195| --- | --- |1196| [`os.path.abspath()`](https://python-all.ru/3.11/library/os.path.html#os.path.abspath) | [`Path.absolute()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.absolute) [\[1\]](https://python-all.ru/3.11/library/pathlib.html#id5) |1197| [`os.path.realpath()`](https://python-all.ru/3.11/library/os.path.html#os.path.realpath) | [`Path.resolve()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.resolve) |1198| [`os.chmod()`](https://python-all.ru/3.11/library/os.html#os.chmod) | [`Path.chmod()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.chmod) |1199| [`os.mkdir()`](https://python-all.ru/3.11/library/os.html#os.mkdir) | [`Path.mkdir()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.mkdir) |1200| [`os.makedirs()`](https://python-all.ru/3.11/library/os.html#os.makedirs) | [`Path.mkdir()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.mkdir) |1201| [`os.rename()`](https://python-all.ru/3.11/library/os.html#os.rename) | [`Path.rename()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.rename) |1202| [`os.replace()`](https://python-all.ru/3.11/library/os.html#os.replace) | [`Path.replace()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.replace) |1203| [`os.rmdir()`](https://python-all.ru/3.11/library/os.html#os.rmdir) | [`Path.rmdir()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.rmdir) |1204| [`os.remove()`](https://python-all.ru/3.11/library/os.html#os.remove), [`os.unlink()`](https://python-all.ru/3.11/library/os.html#os.unlink) | [`Path.unlink()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.unlink) |1205| [`os.getcwd()`](https://python-all.ru/3.11/library/os.html#os.getcwd) | [`Path.cwd()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.cwd) |1206| [`os.path.exists()`](https://python-all.ru/3.11/library/os.path.html#os.path.exists) | [`Path.exists()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.exists) |1207| [`os.path.expanduser()`](https://python-all.ru/3.11/library/os.path.html#os.path.expanduser) | [`Path.expanduser()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.expanduser) и [`Path.home()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.home) |1208| [`os.listdir()`](https://python-all.ru/3.11/library/os.html#os.listdir) | [`Path.iterdir()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.iterdir) |1209| [`os.path.isdir()`](https://python-all.ru/3.11/library/os.path.html#os.path.isdir) | [`Path.is_dir()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.is_dir) |1210| [`os.path.isfile()`](https://python-all.ru/3.11/library/os.path.html#os.path.isfile) | [`Path.is_file()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.is_file) |1211| [`os.path.islink()`](https://python-all.ru/3.11/library/os.path.html#os.path.islink) | [`Path.is_symlink()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.is_symlink) |1212| [`os.link()`](https://python-all.ru/3.11/library/os.html#os.link) | [`Path.hardlink_to()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.hardlink_to) |1213| [`os.symlink()`](https://python-all.ru/3.11/library/os.html#os.symlink) | [`Path.symlink_to()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.symlink_to) |1214| [`os.readlink()`](https://python-all.ru/3.11/library/os.html#os.readlink) | [`Path.readlink()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.readlink) |1215| [`os.path.relpath()`](https://python-all.ru/3.11/library/os.path.html#os.path.relpath) | [`PurePath.relative_to()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath.relative_to) [\[2\]](https://python-all.ru/3.11/library/pathlib.html#id6) |1216| [`os.stat()`](https://python-all.ru/3.11/library/os.html#os.stat) | [`Path.stat()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.stat), [`Path.owner()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.owner), [`Path.group()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.group) |1217| [`os.path.isabs()`](https://python-all.ru/3.11/library/os.path.html#os.path.isabs) | [`PurePath.is_absolute()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath.is_absolute) |1218| [`os.path.join()`](https://python-all.ru/3.11/library/os.path.html#os.path.join) | [`PurePath.joinpath()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath.joinpath) |1219| [`os.path.basename()`](https://python-all.ru/3.11/library/os.path.html#os.path.basename) | [`PurePath.name`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath.name) |1220| [`os.path.dirname()`](https://python-all.ru/3.11/library/os.path.html#os.path.dirname) | [`PurePath.parent`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath.parent) |1221| [`os.path.samefile()`](https://python-all.ru/3.11/library/os.path.html#os.path.samefile) | [`Path.samefile()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.samefile) |1222| [`os.path.splitext()`](https://python-all.ru/3.11/library/os.path.html#os.path.splitext) | [`PurePath.stem`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath.stem) и [`PurePath.suffix`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath.suffix) |12231224Сноски12251226\[[1](https://python-all.ru/3.11/library/pathlib.html#id3)\]12271228[`os.path.abspath()`](https://python-all.ru/3.11/library/os.path.html#os.path.abspath) нормализует результирующий путь, что может изменить его значение при наличии символических ссылок, тогда как [`Path.absolute()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.Path.absolute) этого не делает.12291230\[[2](https://python-all.ru/3.11/library/pathlib.html#id4)\]12311232[`PurePath.relative_to()`](https://python-all.ru/3.11/library/pathlib.html#pathlib.PurePath.relative_to) требует, чтобы `self` был подпутём аргумента, тогда как [`os.path.relpath()`](https://python-all.ru/3.11/library/os.path.html#os.path.relpath) этого не требует.1233