pathlib.md
1> **Источник:** https://python-all.ru/3.4/library/pathlib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 11.1. [`pathlib`](https://python-all.ru/3.4/library/pathlib.html#module-pathlib) – объектно-ориентированные пути файловой системы89Новое в версии 3.4.1011Этот модуль предоставляет классы, представляющие пути файловой системы с семантикой, подходящей для разных операционных систем. Классы путей делятся на [*чистые пути*](https://python-all.ru/3.4/library/pathlib.html#pure-paths), которые выполняют только вычислительные операции без ввода-вывода, и [*конкретные пути*](https://python-all.ru/3.4/library/pathlib.html#concrete-paths), которые наследуют чистые пути, но также предоставляют операции ввода-вывода.12131415Если вы никогда не использовали этот модуль раньше или просто не уверены, какой класс подходит для вашей задачи, скорее всего, вам нужен [`Path`](https://python-all.ru/3.4/library/pathlib.html#pathlib.Path). Он создаёт экземпляр [*конкретного пути*](https://python-all.ru/3.4/library/pathlib.html#concrete-paths) для платформы, на которой выполняется код.1617Чистые пути полезны в некоторых особых случаях; например:18191. Если требуется работать с путями Windows на машине с Unix (или наоборот). Нельзя создать экземпляр [`WindowsPath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.WindowsPath) при работе в Unix, но можно создать экземпляр [`PureWindowsPath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PureWindowsPath).202. Если нужно, чтобы код только манипулировал путями без фактического обращения к ОС. В таком случае может быть полезно создать экземпляр одного из чистых классов, поскольку они просто не имеют операций доступа к ОС.2122> **Примечание**23>24> Этот модуль был включён в стандартную библиотеку на [*временной основе*](https://python-all.ru/3.4/glossary.html#term-provisional-package). Обратно несовместимые изменения (вплоть до удаления пакета) могут быть внесены, если основные разработчики сочтут это необходимым.2526> **См. также**27>28> [**PEP 428**](https://python-all.ru/3.4/library/pathlib.html): модуль pathlib – объектно-ориентированные пути файловой системы.2930> **См. также**31>32> Для низкоуровневых манипуляций с путями в виде строк можно также использовать модуль [`os.path`](https://python-all.ru/3.4/library/os.path.html#module-os.path).3334## 11.1.1. Основное использование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## 11.1.2. Чистые пути8990Объекты чистых путей предоставляют операции обработки путей, которые не обращаются к файловой системе. Существует три способа доступа к этим классам, которые также называются *разновидностями*:9192#### `class pathlib.PurePath(*pathsegments)`9394Обобщённый класс, представляющий вариант пути, принятый в системе (при создании экземпляра порождает либо [`PurePosixPath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PurePosixPath), либо [`PureWindowsPath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PureWindowsPath)):9596```python97>>> PurePath('setup.py') # Запуск на Unix-машине98PurePosixPath('setup.py')99```100101Каждый элемент *pathsegments* может быть либо строкой, представляющей сегмент пути, либо другим объектом пути: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.4/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 смена локального корня не отбрасывает предыдущую настройку диска:127128```python129>>> PureWindowsPath('c:/Windows', '/Program Files')130PureWindowsPath('c:/Program Files')131```132133Лишние косые черты и одиночные точки схлопываются, но двойные точки (`'..'`) – нет, так как это изменило бы смысл пути при наличии символических ссылок:134135```python136>>> PurePath('foo//bar')137PurePosixPath('foo/bar')138>>> PurePath('foo/./bar')139PurePosixPath('foo/bar')140>>> PurePath('foo/../bar')141PurePosixPath('foo/../bar')142```143144(наивный подход сделал бы `PurePosixPath('foo/../bar')` эквивалентным `PurePosixPath('bar')`, что неверно, если `foo` – символическая ссылка на другой каталог)145146#### `class pathlib.PurePosixPath(*pathsegments)`147148Подкласс [`PurePath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PurePath), представляющий пути файловых систем, отличных от Windows:149150```python151>>> PurePosixPath('/etc')152PurePosixPath('/etc')153```154155*pathsegments* задаётся аналогично [`PurePath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PurePath).156157#### `class pathlib.PureWindowsPath(*pathsegments)`158159Подкласс [`PurePath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PurePath), представляющий пути файловой системы Windows:160161```python162>>> PureWindowsPath('c:/Program Files/')163PureWindowsPath('c:/Program Files')164```165166*pathsegments* задаётся аналогично [`PurePath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PurePath).167168Независимо от используемой системы можно создавать экземпляры всех этих классов, поскольку они не предоставляют никаких операций, совершающих системные вызовы.169170### 11.1.2.1. Общие свойства171172Пути неизменяемы и хешируемы. Пути одного варианта сравнимы и упорядочиваемы. Эти свойства учитывают семантику регистрозависимости данного варианта:173174```python175>>> PurePosixPath('foo') == PurePosixPath('FOO')176False177>>> PureWindowsPath('foo') == PureWindowsPath('FOO')178True179>>> PureWindowsPath('FOO') in { PureWindowsPath('foo') }180True181>>> PureWindowsPath('C:') < PureWindowsPath('d:')182True183```184185Пути разных разновидностей неравны и не упорядочиваются:186187```python188>>> PureWindowsPath('foo') == PurePosixPath('foo')189False190>>> PureWindowsPath('foo') < PurePosixPath('foo')191Traceback (most recent call last):192 File "<stdin>", line 1, in <module>193TypeError: unorderable types: PureWindowsPath() < PurePosixPath()194```195196### 11.1.2.2. Операторы197198Оператор косой черты помогает создавать дочерние пути, аналогично [`os.path.join()`](https://python-all.ru/3.4/library/os.path.html#os.path.join):199200```python201>>> p = PurePath('/etc')202>>> p203PurePosixPath('/etc')204>>> p / 'init.d' / 'apache2'205PurePosixPath('/etc/init.d/apache2')206>>> q = PurePath('bin')207>>> '/usr' / q208PurePosixPath('/usr/bin')209```210211Строковое представление пути – это сам сырой путь файловой системы (в нативном виде, например с обратными слешами в Windows), который можно передать любой функции, принимающей путь к файлу в виде строки:212213```python214>>> p = PurePath('/etc')215>>> str(p)216'/etc'217>>> p = PureWindowsPath('c:/Program Files')218>>> str(p)219'c:\\Program Files'220```221222Аналогично, вызов [`bytes`](https://python-all.ru/3.4/library/functions.html#bytes) для пути возвращает необработанный путь файловой системы в виде объекта bytes, закодированный с помощью [`os.fsencode()`](https://python-all.ru/3.4/library/os.html#os.fsencode):223224```python225>>> bytes(p)226b'/etc'227```228229> **Примечание**230>231> Вызов [`bytes`](https://python-all.ru/3.4/library/functions.html#bytes) рекомендуется только в Unix. В Windows представление в виде строки Unicode является каноническим для путей файловой системы.232233### 11.1.2.3. Доступ к отдельным частям234235Для доступа к отдельным «частям» (компонентам) пути используйте следующее свойство:236237#### `PurePath.parts`238239Кортеж, предоставляющий доступ к различным компонентам пути:240241```python242>>> p = PurePath('/usr/bin/python3')243>>> p.parts244('/', 'usr', 'bin', 'python3')245246>>> p = PureWindowsPath('c:/Program Files/PSF')247>>> p.parts248('c:\\', 'Program Files', 'PSF')249```250251(обратите внимание, как диск и локальный корень объединены в одну часть)252253### 11.1.2.4. Методы и свойства254255Чистые пути предоставляют следующие методы и свойства:256257#### `PurePath.drive`258259Строка, представляющая букву или имя диска, если таковой имеется:260261```python262>>> PureWindowsPath('c:/Program Files/').drive263'c:'264>>> PureWindowsPath('/Program Files/').drive265''266>>> PurePosixPath('/etc').drive267''268```269270UNC-ресурсы также считаются дисками:271272```python273>>> PureWindowsPath('//host/share/foo.txt').drive274'\\\\host\\share'275```276277#### `PurePath.root`278279Строка, представляющая (локальный или глобальный) корень, если таковой имеется:280281```python282>>> PureWindowsPath('c:/Program Files/').root283'\\'284>>> PureWindowsPath('c:Program Files/').root285''286>>> PurePosixPath('/etc').root287'/'288```289290UNC-ресурсы всегда имеют корень:291292```python293>>> PureWindowsPath('//host/share').root294'\\'295```296297#### `PurePath.anchor`298299Объединение диска и корневого каталога:300301```python302>>> PureWindowsPath('c:/Program Files/').anchor303'c:\\'304>>> PureWindowsPath('c:Program Files/').anchor305'c:'306>>> PurePosixPath('/etc').anchor307'/'308>>> PureWindowsPath('//host/share').anchor309'\\\\host\\share\\'310```311312#### `PurePath.parents`313314Неизменяемая последовательность, обеспечивающая доступ к логическим предкам пути:315316```python317>>> p = PureWindowsPath('c:/foo/bar/setup.py')318>>> p.parents[0]319PureWindowsPath('c:/foo/bar')320>>> p.parents[1]321PureWindowsPath('c:/foo')322>>> p.parents[2]323PureWindowsPath('c:/')324```325326#### `PurePath.parent`327328Логический родитель пути:329330```python331>>> p = PurePosixPath('/a/b/c/d')332>>> p.parent333PurePosixPath('/a/b/c')334```335336Нельзя выйти за пределы anchor или пустого пути:337338```python339>>> p = PurePosixPath('/')340>>> p.parent341PurePosixPath('/')342>>> p = PurePosixPath('.')343>>> p.parent344PurePosixPath('.')345```346347> **Примечание**348>349> Это чисто лексическая операция, поэтому поведение следующее:350>351> ```python352> >>> p = PurePosixPath('foo/..')353> >>> p.parent354> PurePosixPath('foo')355> ```356>357> Если нужно подняться вверх по произвольному пути файловой системы, рекомендуется сначала вызвать [`Path.resolve()`](https://python-all.ru/3.4/library/pathlib.html#pathlib.Path.resolve), чтобы разрешить символические ссылки и устранить компоненты *”..”*.358359#### `PurePath.name`360361Строка, представляющая последний компонент пути, исключая диск и корневой каталог (если они есть):362363```python364>>> PurePosixPath('my/library/setup.py').name365'setup.py'366```367368UNC-имена дисков не учитываются:369370```python371>>> PureWindowsPath('//some/share/setup.py').name372'setup.py'373>>> PureWindowsPath('//some/share').name374''375```376377#### `PurePath.suffix`378379Расширение файла последнего компонента, если таковое имеется:380381```python382>>> PurePosixPath('my/library/setup.py').suffix383'.py'384>>> PurePosixPath('my/library.tar.gz').suffix385'.gz'386>>> PurePosixPath('my/library').suffix387''388```389390#### `PurePath.suffixes`391392Список расширений файлов пути:393394```python395>>> PurePosixPath('my/library.tar.gar').suffixes396['.tar', '.gar']397>>> PurePosixPath('my/library.tar.gz').suffixes398['.tar', '.gz']399>>> PurePosixPath('my/library').suffixes400[]401```402403#### `PurePath.stem`404405Последний компонент пути без суффикса:406407```python408>>> PurePosixPath('my/library.tar.gz').stem409'library.tar'410>>> PurePosixPath('my/library.tar').stem411'library'412>>> PurePosixPath('my/library').stem413'library'414```415416#### `PurePath.as_posix()`417418Возвращает строковое представление пути с прямыми слэшами (`/`):419420```python421>>> p = PureWindowsPath('c:\\windows')422>>> str(p)423'c:\\windows'424>>> p.as_posix()425'c:/windows'426```427428#### `PurePath.as_uri()`429430Представляет путь в виде `file` URI. Если путь не является абсолютным, возбуждается [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError).431432```python433>>> p = PurePosixPath('/etc/passwd')434>>> p.as_uri()435'file:///etc/passwd'436>>> p = PureWindowsPath('c:/Windows')437>>> p.as_uri()438'file:///c:/Windows'439```440441#### `PurePath.is_absolute()`442443Возвращает, является ли путь абсолютным. Путь считается абсолютным, если у него есть и корень, и (если это допускает разновидность) диск:444445```python446>>> PurePosixPath('/a/b').is_absolute()447True448>>> PurePosixPath('a/b').is_absolute()449False450451>>> PureWindowsPath('c:/a/b').is_absolute()452True453>>> PureWindowsPath('/a/b').is_absolute()454False455>>> PureWindowsPath('c:').is_absolute()456False457>>> PureWindowsPath('//some/share').is_absolute()458True459```460461#### `PurePath.is_reserved()`462463С [`PureWindowsPath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PureWindowsPath) возвращает `True`, если путь считается зарезервированным в Windows, иначе `False`. С [`PurePosixPath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PurePosixPath) всегда возвращается `False`.464465```python466>>> PureWindowsPath('nul').is_reserved()467True468>>> PurePosixPath('nul').is_reserved()469False470```471472Вызовы файловой системы для зарезервированных путей могут приводить к неожиданным ошибкам или непредвиденным последствиям.473474#### `PurePath.joinpath(*other)`475476Вызов этого метода эквивалентен последовательному объединению пути с каждым из аргументов *other*:477478```python479>>> PurePosixPath('/etc').joinpath('passwd')480PurePosixPath('/etc/passwd')481>>> PurePosixPath('/etc').joinpath(PurePosixPath('passwd'))482PurePosixPath('/etc/passwd')483>>> PurePosixPath('/etc').joinpath('init.d', 'apache2')484PurePosixPath('/etc/init.d/apache2')485>>> PureWindowsPath('c:').joinpath('/Program Files')486PureWindowsPath('c:/Program Files')487```488489#### `PurePath.match(pattern)`490491Сопоставляет этот путь с заданным шаблоном в стиле glob. Возвращает `True` если сопоставление успешно, иначе `False`.492493Если *pattern* является относительным, путь может быть как относительным, так и абсолютным, и сопоставление выполняется с правого конца:494495```python496>>> PurePath('a/b.py').match('*.py')497True498>>> PurePath('/a/b/c.py').match('b/*.py')499True500>>> PurePath('/a/b/c.py').match('a/*.py')501False502```503504Если *pattern* является абсолютным, путь должен быть абсолютным, и должен совпадать весь путь:505506```python507>>> PurePath('/a.py').match('/*.py')508True509>>> PurePath('a/b.py').match('/*.py')510False511```512513Как и в случае с другими методами, учитывается регистр символов:514515```python516>>> PureWindowsPath('b.py').match('*.PY')517True518```519520#### `PurePath.relative_to(*other)`521522Вычисляет версию этого пути относительно пути, представленного *other*. Если это невозможно, возбуждается ValueError:523524```python525>>> p = PurePosixPath('/etc/passwd')526>>> p.relative_to('/')527PurePosixPath('etc/passwd')528>>> p.relative_to('/etc')529PurePosixPath('passwd')530>>> p.relative_to('/usr')531Traceback (most recent call last):532 File "<stdin>", line 1, in <module>533 File "pathlib.py", line 694, in relative_to534 .format(str(self), str(formatted)))535ValueError: '/etc/passwd' does not start with '/usr'536```537538#### `PurePath.with_name(name)`539540Возвращает новый путь с изменённым [`именем`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PurePath.name). Если исходный путь не имеет имени, возбуждается ValueError:541542```python543>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')544>>> p.with_name('setup.py')545PureWindowsPath('c:/Downloads/setup.py')546>>> p = PureWindowsPath('c:/')547>>> p.with_name('setup.py')548Traceback (most recent call last):549 File "<stdin>", line 1, in <module>550 File "/home/antoine/cpython/default/Lib/pathlib.py", line 751, in with_name551 raise ValueError("%r has an empty name" % (self,))552ValueError: PureWindowsPath('c:/') has an empty name553```554555#### `PurePath.with_suffix(suffix)`556557Возвращает новый путь с изменённым [`суффиксом`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PurePath.suffix). Если исходный путь не имеет суффикса, вместо него добавляется новый *suffix*.558559```python560>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')561>>> p.with_suffix('.bz2')562PureWindowsPath('c:/Downloads/pathlib.tar.bz2')563>>> p = PureWindowsPath('README')564>>> p.with_suffix('.txt')565PureWindowsPath('README.txt')566```567568## 11.1.3. Конкретные пути569570Конкретные пути – это подклассы чистых классов путей. В дополнение к операциям, предоставляемым последними, они также предоставляют методы для выполнения системных вызовов над объектами путей. Есть три способа создания конкретных путей:571572#### `class pathlib.Path(*pathsegments)`573574Подкласс [`PurePath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PurePath), этот класс представляет конкретные пути системного типа (при создании экземпляра создаётся либо [`PosixPath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PosixPath), либо [`WindowsPath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.WindowsPath)):575576```python577>>> Path('setup.py')578PosixPath('setup.py')579```580581*pathsegments* задаётся аналогично [`PurePath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PurePath).582583#### `class pathlib.PosixPath(*pathsegments)`584585Подкласс [`Path`](https://python-all.ru/3.4/library/pathlib.html#pathlib.Path) и [`PurePosixPath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PurePosixPath), этот класс представляет конкретные пути файловой системы, отличные от Windows:586587```python588>>> PosixPath('/etc')589PosixPath('/etc')590```591592*pathsegments* задаётся аналогично [`PurePath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PurePath).593594#### `class pathlib.WindowsPath(*pathsegments)`595596Подкласс [`Path`](https://python-all.ru/3.4/library/pathlib.html#pathlib.Path) и [`PureWindowsPath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PureWindowsPath), этот класс представляет конкретные пути файловой системы Windows:597598```python599>>> WindowsPath('c:/Program Files/')600WindowsPath('c:/Program Files')601```602603*pathsegments* задаётся аналогично [`PurePath`](https://python-all.ru/3.4/library/pathlib.html#pathlib.PurePath).604605Можно создать экземпляр только того flavour класса, который соответствует системе (использование системных вызовов для несовместимых flavour путей может привести к ошибкам или сбоям в приложении):606607```python608>>> import os609>>> os.name610'posix'611>>> Path('setup.py')612PosixPath('setup.py')613>>> PosixPath('setup.py')614PosixPath('setup.py')615>>> WindowsPath('setup.py')616Traceback (most recent call last):617 File "<stdin>", line 1, in <module>618 File "pathlib.py", line 798, in __new__619 % (cls.__name__,))620NotImplementedError: cannot instantiate 'WindowsPath' on your system621```622623### 11.1.3.1. Методы624625Конкретные пути предоставляют следующие методы в дополнение к методам чистых путей. Многие из этих методов могут возбуждать [`OSError`](https://python-all.ru/3.4/library/exceptions.html#OSError), если системный вызов завершается ошибкой (например, если путь не существует):626627#### `classmethod Path.cwd()`628629Возвращает новый объект пути, представляющий текущий каталог (как возвращается [`os.getcwd()`](https://python-all.ru/3.4/library/os.html#os.getcwd)):630631```python632>>> Path.cwd()633PosixPath('/home/antoine/pathlib')634```635636#### `Path.stat()`637638Возвращает информацию об этом пути (аналогично [`os.stat()`](https://python-all.ru/3.4/library/os.html#os.stat)). Результат запрашивается при каждом вызове этого метода.639640```python641>>> p = Path('setup.py')642>>> p.stat().st_size643956644>>> p.stat().st_mtime6451327883547.852554646```647648#### `Path.chmod(mode)`649650Изменяет режим и права доступа к файлу, как [`os.chmod()`](https://python-all.ru/3.4/library/os.html#os.chmod):651652```python653>>> p = Path('setup.py')654>>> p.stat().st_mode65533277656>>> p.chmod(0o444)657>>> p.stat().st_mode65833060659```660661#### `Path.exists()`662663Указывает ли путь на существующий файл или каталог:664665```python666>>> Path('.').exists()667True668>>> Path('setup.py').exists()669True670>>> Path('/etc').exists()671True672>>> Path('nonexistentfile').exists()673False674```675676> **Примечание**677>678> Если путь указывает на символическую ссылку, [`exists()`](https://python-all.ru/3.4/library/pathlib.html#pathlib.Path.exists) возвращает, указывает ли символическая ссылка *на* существующий файл или каталог.679680#### `Path.glob(pattern)`681682Выполняет поиск по заданному *шаблону* в каталоге, представленном этим путём, возвращая все соответствующие файлы (любого типа):683684```python685>>> sorted(Path('.').glob('*.py'))686[PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')]687>>> sorted(Path('.').glob('*/*.py'))688[PosixPath('docs/conf.py')]689```690691Шаблон «`**`» означает «этот каталог и все его подкаталоги рекурсивно». Другими словами, он включает рекурсивный поиск по шаблону:692693```python694>>> sorted(Path('.').glob('**/*.py'))695[PosixPath('build/lib/pathlib.py'),696 PosixPath('docs/conf.py'),697 PosixPath('pathlib.py'),698 PosixPath('setup.py'),699 PosixPath('test_pathlib.py')]700```701702> **Примечание**703>704> Использование шаблона «`**`» в больших деревьях каталогов может занять чрезмерно много времени.705706#### `Path.group()`707708Возвращает имя группы-владельца файла. [`KeyError`](https://python-all.ru/3.4/library/exceptions.html#KeyError) возбуждается, если gid файла не найден в системной базе данных.709710#### `Path.is_dir()`711712Возвращает `True`, если путь указывает на каталог (или символическую ссылку, указывающую на каталог), и `False`, если указывает на файл другого типа.713714`False` также возвращается, если путь не существует или является битой символической ссылкой; другие ошибки (например, ошибки разрешений) пробрасываются.715716#### `Path.is_file()`717718Возвращает `True`, если путь указывает на обычный файл (или символическую ссылку, указывающую на обычный файл), и `False`, если указывает на файл другого типа.719720`False` также возвращается, если путь не существует или является битой символической ссылкой; другие ошибки (например, ошибки разрешений) пробрасываются.721722#### `Path.is_symlink()`723724Возвращает `True`, если путь указывает на символическую ссылку, и `False` в противном случае.725726`False` также возвращается, если путь не существует; другие ошибки (например, ошибки разрешений) пробрасываются.727728#### `Path.is_socket()`729730Возвращает `True`, если путь указывает на сокет Unix (или символическую ссылку, указывающую на сокет Unix), и `False`, если указывает на файл другого типа.731732`False` также возвращается, если путь не существует или является битой символической ссылкой; другие ошибки (например, ошибки разрешений) пробрасываются.733734#### `Path.is_fifo()`735736Возвращает `True`, если путь указывает на FIFO (или символическую ссылку, указывающую на FIFO), и `False`, если указывает на файл другого типа.737738`False` также возвращается, если путь не существует или является битой символической ссылкой; другие ошибки (например, ошибки разрешений) пробрасываются.739740#### `Path.is_block_device()`741742Возвращает `True`, если путь указывает на блочное устройство (или символическую ссылку, указывающую на блочное устройство), и `False`, если указывает на файл другого типа.743744`False` также возвращается, если путь не существует или является битой символической ссылкой; другие ошибки (например, ошибки разрешений) пробрасываются.745746#### `Path.is_char_device()`747748Возвращает `True`, если путь указывает на символьное устройство (или символическую ссылку, указывающую на символьное устройство), и `False`, если указывает на файл другого типа.749750`False` также возвращается, если путь не существует или является битой символической ссылкой; другие ошибки (например, ошибки разрешений) пробрасываются.751752#### `Path.iterdir()`753754Если путь указывает на каталог, возвращает объекты пути для его содержимого:755756```python757>>> p = Path('docs')758>>> for child in p.iterdir(): child759...760PosixPath('docs/conf.py')761PosixPath('docs/_templates')762PosixPath('docs/make.bat')763PosixPath('docs/index.rst')764PosixPath('docs/_build')765PosixPath('docs/_static')766PosixPath('docs/Makefile')767```768769#### `Path.lchmod(mode)`770771Аналогично [`Path.chmod()`](https://python-all.ru/3.4/library/pathlib.html#pathlib.Path.chmod), но если путь указывает на символическую ссылку, изменяется режим символической ссылки, а не её цели.772773#### `Path.lstat()`774775Аналогично [`Path.stat()`](https://python-all.ru/3.4/library/pathlib.html#pathlib.Path.stat), но если путь указывает на символическую ссылку, возвращается информация о символической ссылке, а не о её цели.776777#### `Path.mkdir(mode=0o777, parents=False)`778779Создаёт новый каталог по указанному пути. Если задан параметр *mode*, он комбинируется со значением `umask` процесса для определения режима файла и флагов доступа. Если путь уже существует, возбуждается [`FileExistsError`](https://python-all.ru/3.4/library/exceptions.html#FileExistsError).780781Если *parents* истинно, все отсутствующие родительские каталоги этого пути создаются по необходимости; они создаются с правами по умолчанию, без учёта *mode* (как команда POSIX `mkdir -p`).782783Если *parents* ложно (значение по умолчанию), отсутствие родительского каталога приводит к возбуждению [`FileNotFoundError`](https://python-all.ru/3.4/library/exceptions.html#FileNotFoundError).784785#### `Path.open(mode='r', buffering=-1, encoding=None, errors=None, newline=None)`786787Открывает файл, на который указывает путь, как встроенная функция [`open()`](https://python-all.ru/3.4/library/functions.html#open):788789```python790>>> p = Path('setup.py')791>>> with p.open() as f:792... f.readline()793...794'#!/usr/bin/env python3\n'795```796797#### `Path.owner()`798799Возвращает имя пользователя, владеющего файлом. Исключение [`KeyError`](https://python-all.ru/3.4/library/exceptions.html#KeyError) возбуждается, если uid файла не найден в системной базе данных.800801#### `Path.rename(target)`802803Переименовывает этот файл или каталог в указанный *target*. *target* может быть строкой или другим объектом пути:804805```python806>>> p = Path('foo')807>>> p.open('w').write('some text')8089809>>> target = Path('bar')810>>> p.rename(target)811>>> target.open().read()812'some text'813```814815#### `Path.replace(target)`816817Переименовывает этот файл или каталог в указанный *target*. Если *target* указывает на существующий файл или каталог, он будет безусловно заменён.818819#### `Path.resolve()`820821Делает путь абсолютным, разрешая все символические ссылки. Возвращается новый объект пути:822823```python824>>> p = Path()825>>> p826PosixPath('.')827>>> p.resolve()828PosixPath('/home/antoine/pathlib')829```830831Компоненты *”..”* также удаляются (это единственный способ сделать это):832833```python834>>> p = Path('docs/../setup.py')835>>> p.resolve()836PosixPath('/home/antoine/pathlib/setup.py')837```838839Если путь не существует, возбуждается [`FileNotFoundError`](https://python-all.ru/3.4/library/exceptions.html#FileNotFoundError). Если в процессе разрешения пути обнаружен бесконечный цикл, возбуждается [`RuntimeError`](https://python-all.ru/3.4/library/exceptions.html#RuntimeError).840841#### `Path.rglob(pattern)`842843Это аналогично вызову [`glob()`](https://python-all.ru/3.4/library/glob.html#module-glob) с добавлением «`**`» перед указанным *pattern*:844845```python846>>> sorted(Path().rglob("*.py"))847[PosixPath('build/lib/pathlib.py'),848 PosixPath('docs/conf.py'),849 PosixPath('pathlib.py'),850 PosixPath('setup.py'),851 PosixPath('test_pathlib.py')]852```853854#### `Path.rmdir()`855856Удаляет этот каталог. Каталог должен быть пустым.857858#### `Path.symlink_to(target, target_is_directory=False)`859860Делает этот путь символической ссылкой на *target*. В Windows *target\_is\_directory* должно быть истинным (по умолчанию `False`), если целью ссылки является каталог. В POSIX значение *target\_is\_directory* игнорируется.861862```python863>>> p = Path('mylink')864>>> p.symlink_to('setup.py')865>>> p.resolve()866PosixPath('/home/antoine/pathlib/setup.py')867>>> p.stat().st_size868956869>>> p.lstat().st_size8708871```872873> **Примечание**874>875> Порядок аргументов (link, target) обратен порядку [`os.symlink()`](https://python-all.ru/3.4/library/os.html#os.symlink).876877#### `Path.touch(mode=0o777, exist_ok=True)`878879Создаёт файл по указанному пути. Если задан *mode*, он комбинируется со значением `umask` процесса для определения режима файла и флагов доступа. Если файл уже существует, функция выполняется успешно, если *exist\_ok* истинно (время модификации файла обновляется до текущего), в противном случае возбуждается [`FileExistsError`](https://python-all.ru/3.4/library/exceptions.html#FileExistsError).880881#### `Path.unlink()`882883Удаляет этот файл или символическую ссылку. Если путь указывает на каталог, используйте [`Path.rmdir()`](https://python-all.ru/3.4/library/pathlib.html#pathlib.Path.rmdir).884