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

pathlib.md

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

1> **Источник:** https://python-all.ru/3.5/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.5/library/pathlib.html#module-pathlib) – Объектно-ориентированные пути к файловой системе89Новое в версии 3.4.1011**Исходный код:** [Lib/pathlib.py](https://python-all.ru/src/3.5/Lib/pathlib.py)1213---1415Этот модуль предоставляет классы, представляющие пути файловой системы с семантикой, подходящей для разных операционных систем. Классы путей делятся на [чистые пути](https://python-all.ru/3.5/library/pathlib.html#pure-paths), которые выполняют только вычислительные операции без ввода-вывода, и [конкретные пути](https://python-all.ru/3.5/library/pathlib.html#concrete-paths), которые наследуют чистые пути, но также предоставляют операции ввода-вывода.1617![../_images/pathlib-inheritance.png](https://python-all.ru/3.5/_images/pathlib-inheritance.png)1819Если вы никогда не пользовались этим модулем раньше или просто не уверены, какой класс подходит для вашей задачи, скорее всего, вам нужен [`Path`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path). Он создаёт экземпляр [конкретного пути](https://python-all.ru/3.5/library/pathlib.html#concrete-paths) для платформы, на которой выполняется код.2021Чистые пути полезны в некоторых особых случаях; например:22231. Если требуется манипулировать путями Windows на машине Unix (или наоборот). При работе на Unix нельзя создать экземпляр [`WindowsPath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.WindowsPath), но можно создать [`PureWindowsPath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PureWindowsPath).242. Если нужно, чтобы код только манипулировал путями без фактического обращения к ОС. В таком случае может быть полезно создать экземпляр одного из чистых классов, поскольку они просто не имеют операций доступа к ОС.2526> **Примечание**27>28> Этот модуль был включён в стандартную библиотеку на [временной основе](https://python-all.ru/3.5/glossary.html#term-provisional-package). Обратно несовместимые изменения (вплоть до удаления пакета) могут быть внесены, если основные разработчики сочтут это необходимым.2930> **См. также**31>32> [**PEP 428**](https://python-all.ru/3.5/library/pathlib.html): модуль pathlib – объектно-ориентированные пути файловой системы.3334> **См. также**35>36> Для низкоуровневых манипуляций с путями в виде строк можно также использовать модуль [`os.path`](https://python-all.ru/3.5/library/os.path.html#module-os.path).3738## 11.1.1. Основное использование3940Импорт основного класса:4142```python43>>> from pathlib import Path44```4546Список подкаталогов:4748```python49>>> p = Path('.')50>>> [x for x in p.iterdir() if x.is_dir()]51[PosixPath('.hg'), PosixPath('docs'), PosixPath('dist'),52 PosixPath('__pycache__'), PosixPath('build')]53```5455Список исходных файлов Python в этом дереве каталогов:5657```python58>>> list(p.glob('**/*.py'))59[PosixPath('test_pathlib.py'), PosixPath('setup.py'),60 PosixPath('pathlib.py'), PosixPath('docs/conf.py'),61 PosixPath('build/lib/pathlib.py')]62```6364Навигация по дереву каталогов:6566```python67>>> p = Path('/etc')68>>> q = p / 'init.d' / 'reboot'69>>> q70PosixPath('/etc/init.d/reboot')71>>> q.resolve()72PosixPath('/etc/rc.d/init.d/halt')73```7475Запрос свойств пути:7677```python78>>> q.exists()79True80>>> q.is_dir()81False82```8384Открытие файла:8586```python87>>> with q.open() as f: f.readline()88...89'#!/bin/bash\n'90```9192## 11.1.2. Чистые пути9394Объекты чистых путей предоставляют операции обработки путей, которые не обращаются к файловой системе. Существует три способа доступа к этим классам, которые также называются *разновидностями*:9596#### `class pathlib.PurePath(*pathsegments)`9798Общий класс, представляющий разновидность пути системы (при создании экземпляра создаётся либо [`PurePosixPath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PurePosixPath), либо [`PureWindowsPath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PureWindowsPath)):99100```python101>>> PurePath('setup.py')      # Запуск на Unix-машине102PurePosixPath('setup.py')103```104105Каждый элемент *pathsegments* может быть либо строкой, представляющей сегмент пути, либо другим объектом пути:106107```python108>>> PurePath('foo', 'some/path', 'bar')109PurePosixPath('foo/some/path/bar')110>>> PurePath(Path('foo'), Path('bar'))111PurePosixPath('foo/bar')112```113114Когда *pathsegments* пуст, подразумевается текущий каталог:115116```python117>>> PurePath()118PurePosixPath('.')119```120121Когда передано несколько абсолютных путей, последний используется как привязка (по аналогии с поведением [`os.path.join()`](https://python-all.ru/3.5/library/os.path.html#os.path.join)):122123```python124>>> PurePath('/etc', '/usr', 'lib64')125PurePosixPath('/usr/lib64')126>>> PureWindowsPath('c:/Windows', 'd:bar')127PureWindowsPath('d:bar')128```129130Однако в пути Windows смена локального корня не отбрасывает предыдущую настройку диска:131132```python133>>> PureWindowsPath('c:/Windows', '/Program Files')134PureWindowsPath('c:/Program Files')135```136137Лишние косые черты и одиночные точки схлопываются, но двойные точки (`'..'`) – нет, так как это изменило бы смысл пути при наличии символических ссылок:138139```python140>>> PurePath('foo//bar')141PurePosixPath('foo/bar')142>>> PurePath('foo/./bar')143PurePosixPath('foo/bar')144>>> PurePath('foo/../bar')145PurePosixPath('foo/../bar')146```147148(наивный подход сделал бы `PurePosixPath('foo/../bar')` эквивалентным `PurePosixPath('bar')`, что неверно, если `foo` является символической ссылкой на другой каталог)149150#### `class pathlib.PurePosixPath(*pathsegments)`151152Подкласс [`PurePath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PurePath), эта разновидность путей представляет пути файловой системы, отличные от Windows:153154```python155>>> PurePosixPath('/etc')156PurePosixPath('/etc')157```158159Параметр *pathsegments* задаётся так же, как [`PurePath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PurePath).160161#### `class pathlib.PureWindowsPath(*pathsegments)`162163Подкласс [`PurePath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PurePath), этот вариант пути представляет пути файловой системы Windows:164165```python166>>> PureWindowsPath('c:/Program Files/')167PureWindowsPath('c:/Program Files')168```169170Параметр *pathsegments* задаётся так же, как [`PurePath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PurePath).171172Независимо от используемой системы можно создавать экземпляры всех этих классов, поскольку они не предоставляют никаких операций, совершающих системные вызовы.173174### 11.1.2.1. Общие свойства175176Пути неизменяемы и хешируемы. Пути одного варианта сравнимы и упорядочиваемы. Эти свойства учитывают семантику регистрозависимости данного варианта:177178```python179>>> PurePosixPath('foo') == PurePosixPath('FOO')180False181>>> PureWindowsPath('foo') == PureWindowsPath('FOO')182True183>>> PureWindowsPath('FOO') in { PureWindowsPath('foo') }184True185>>> PureWindowsPath('C:') < PureWindowsPath('d:')186True187```188189Пути разных разновидностей неравны и не упорядочиваются:190191```python192>>> PureWindowsPath('foo') == PurePosixPath('foo')193False194>>> PureWindowsPath('foo') < PurePosixPath('foo')195Traceback (most recent call last):196  File "<stdin>", line 1, in <module>197TypeError: unorderable types: PureWindowsPath() < PurePosixPath()198```199200### 11.1.2.2. Операторы201202Оператор слэш помогает создавать дочерние пути, аналогично [`os.path.join()`](https://python-all.ru/3.5/library/os.path.html#os.path.join):203204```python205>>> p = PurePath('/etc')206>>> p207PurePosixPath('/etc')208>>> p / 'init.d' / 'apache2'209PurePosixPath('/etc/init.d/apache2')210>>> q = PurePath('bin')211>>> '/usr' / q212PurePosixPath('/usr/bin')213```214215Строковое представление пути – это сам сырой путь файловой системы (в нативном виде, например с обратными слешами в Windows), который можно передать любой функции, принимающей путь к файлу в виде строки:216217```python218>>> p = PurePath('/etc')219>>> str(p)220'/etc'221>>> p = PureWindowsPath('c:/Program Files')222>>> str(p)223'c:\\Program Files'224```225226Аналогично, вызов [`bytes`](https://python-all.ru/3.5/library/functions.html#bytes) для пути возвращает сырой путь файловой системы в виде объекта bytes, закодированный с помощью [`os.fsencode()`](https://python-all.ru/3.5/library/os.html#os.fsencode):227228```python229>>> bytes(p)230b'/etc'231```232233> **Примечание**234>235> Вызов [`bytes`](https://python-all.ru/3.5/library/functions.html#bytes) рекомендуется только в Unix. В Windows форма Unicode является каноническим представлением путей файловой системы.236237### 11.1.2.3. Доступ к отдельным частям238239Для доступа к отдельным «частям» (компонентам) пути используйте следующее свойство:240241#### `PurePath.parts`242243Кортеж, предоставляющий доступ к различным компонентам пути:244245```python246>>> p = PurePath('/usr/bin/python3')247>>> p.parts248('/', 'usr', 'bin', 'python3')249250>>> p = PureWindowsPath('c:/Program Files/PSF')251>>> p.parts252('c:\\', 'Program Files', 'PSF')253```254255(обратите внимание, как диск и локальный корень объединены в одну часть)256257### 11.1.2.4. Методы и свойства258259Чистые пути предоставляют следующие методы и свойства:260261#### `PurePath.drive`262263Строка, представляющая букву или имя диска, если таковой имеется:264265```python266>>> PureWindowsPath('c:/Program Files/').drive267'c:'268>>> PureWindowsPath('/Program Files/').drive269''270>>> PurePosixPath('/etc').drive271''272```273274UNC-ресурсы также считаются дисками:275276```python277>>> PureWindowsPath('//host/share/foo.txt').drive278'\\\\host\\share'279```280281#### `PurePath.root`282283Строка, представляющая (локальный или глобальный) корень, если таковой имеется:284285```python286>>> PureWindowsPath('c:/Program Files/').root287'\\'288>>> PureWindowsPath('c:Program Files/').root289''290>>> PurePosixPath('/etc').root291'/'292```293294UNC-ресурсы всегда имеют корень:295296```python297>>> PureWindowsPath('//host/share').root298'\\'299```300301#### `PurePath.anchor`302303Объединение диска и корневого каталога:304305```python306>>> PureWindowsPath('c:/Program Files/').anchor307'c:\\'308>>> PureWindowsPath('c:Program Files/').anchor309'c:'310>>> PurePosixPath('/etc').anchor311'/'312>>> PureWindowsPath('//host/share').anchor313'\\\\host\\share\\'314```315316#### `PurePath.parents`317318Неизменяемая последовательность, обеспечивающая доступ к логическим предкам пути:319320```python321>>> p = PureWindowsPath('c:/foo/bar/setup.py')322>>> p.parents[0]323PureWindowsPath('c:/foo/bar')324>>> p.parents[1]325PureWindowsPath('c:/foo')326>>> p.parents[2]327PureWindowsPath('c:/')328```329330#### `PurePath.parent`331332Логический родитель пути:333334```python335>>> p = PurePosixPath('/a/b/c/d')336>>> p.parent337PurePosixPath('/a/b/c')338```339340Нельзя выйти за пределы anchor или пустого пути:341342```python343>>> p = PurePosixPath('/')344>>> p.parent345PurePosixPath('/')346>>> p = PurePosixPath('.')347>>> p.parent348PurePosixPath('.')349```350351> **Примечание**352>353> Это чисто лексическая операция, поэтому поведение следующее:354>355> ```python356> >>> p = PurePosixPath('foo/..')357> >>> p.parent358> PurePosixPath('foo')359> ```360>361> Если нужно подняться вверх по произвольному пути файловой системы, рекомендуется сначала вызвать [`Path.resolve()`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path.resolve), чтобы разрешить символические ссылки и убрать компоненты *“..”*.362363#### `PurePath.name`364365Строка, представляющая последний компонент пути, исключая диск и корневой каталог (если они есть):366367```python368>>> PurePosixPath('my/library/setup.py').name369'setup.py'370```371372UNC-имена дисков не учитываются:373374```python375>>> PureWindowsPath('//some/share/setup.py').name376'setup.py'377>>> PureWindowsPath('//some/share').name378''379```380381#### `PurePath.suffix`382383Расширение файла последнего компонента, если таковое имеется:384385```python386>>> PurePosixPath('my/library/setup.py').suffix387'.py'388>>> PurePosixPath('my/library.tar.gz').suffix389'.gz'390>>> PurePosixPath('my/library').suffix391''392```393394#### `PurePath.suffixes`395396Список расширений файлов пути:397398```python399>>> PurePosixPath('my/library.tar.gar').suffixes400['.tar', '.gar']401>>> PurePosixPath('my/library.tar.gz').suffixes402['.tar', '.gz']403>>> PurePosixPath('my/library').suffixes404[]405```406407#### `PurePath.stem`408409Последний компонент пути без суффикса:410411```python412>>> PurePosixPath('my/library.tar.gz').stem413'library.tar'414>>> PurePosixPath('my/library.tar').stem415'library'416>>> PurePosixPath('my/library').stem417'library'418```419420#### `PurePath.as_posix()`421422Возвращает строковое представление пути с прямыми слэшами (`/`):423424```python425>>> p = PureWindowsPath('c:\\windows')426>>> str(p)427'c:\\windows'428>>> p.as_posix()429'c:/windows'430```431432#### `PurePath.as_uri()`433434Представляет путь в виде `file` URI. [`ValueError`](https://python-all.ru/3.5/library/exceptions.html#ValueError) возбуждается, если путь не является абсолютным.435436```python437>>> p = PurePosixPath('/etc/passwd')438>>> p.as_uri()439'file:///etc/passwd'440>>> p = PureWindowsPath('c:/Windows')441>>> p.as_uri()442'file:///c:/Windows'443```444445#### `PurePath.is_absolute()`446447Возвращает, является ли путь абсолютным. Путь считается абсолютным, если у него есть и корень, и (если это допускает разновидность) диск:448449```python450>>> PurePosixPath('/a/b').is_absolute()451True452>>> PurePosixPath('a/b').is_absolute()453False454455>>> PureWindowsPath('c:/a/b').is_absolute()456True457>>> PureWindowsPath('/a/b').is_absolute()458False459>>> PureWindowsPath('c:').is_absolute()460False461>>> PureWindowsPath('//some/share').is_absolute()462True463```464465#### `PurePath.is_reserved()`466467С [`PureWindowsPath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PureWindowsPath) возвращает `True`, если путь считается зарезервированным в Windows, иначе `False`. С [`PurePosixPath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PurePosixPath) всегда возвращается `False`.468469```python470>>> PureWindowsPath('nul').is_reserved()471True472>>> PurePosixPath('nul').is_reserved()473False474```475476Вызовы файловой системы для зарезервированных путей могут приводить к неожиданным ошибкам или непредвиденным последствиям.477478#### `PurePath.joinpath(*other)`479480Вызов этого метода эквивалентен последовательному объединению пути с каждым из аргументов *other*:481482```python483>>> PurePosixPath('/etc').joinpath('passwd')484PurePosixPath('/etc/passwd')485>>> PurePosixPath('/etc').joinpath(PurePosixPath('passwd'))486PurePosixPath('/etc/passwd')487>>> PurePosixPath('/etc').joinpath('init.d', 'apache2')488PurePosixPath('/etc/init.d/apache2')489>>> PureWindowsPath('c:').joinpath('/Program Files')490PureWindowsPath('c:/Program Files')491```492493#### `PurePath.match(pattern)`494495Сопоставляет этот путь с предоставленным шаблоном в стиле glob. Возвращает `True` в случае успешного сопоставления, иначе `False`.496497Если *pattern* является относительным, путь может быть как относительным, так и абсолютным, и сопоставление выполняется с правого конца:498499```python500>>> PurePath('a/b.py').match('*.py')501True502>>> PurePath('/a/b/c.py').match('b/*.py')503True504>>> PurePath('/a/b/c.py').match('a/*.py')505False506```507508Если *pattern* является абсолютным, путь должен быть абсолютным, и должен совпадать весь путь:509510```python511>>> PurePath('/a.py').match('/*.py')512True513>>> PurePath('a/b.py').match('/*.py')514False515```516517Как и в случае с другими методами, учитывается регистр символов:518519```python520>>> PureWindowsPath('b.py').match('*.PY')521True522```523524#### `PurePath.relative_to(*other)`525526Вычисляет версию этого пути относительно пути, представленного *other*. Если это невозможно, возбуждается ValueError:527528```python529>>> p = PurePosixPath('/etc/passwd')530>>> p.relative_to('/')531PurePosixPath('etc/passwd')532>>> p.relative_to('/etc')533PurePosixPath('passwd')534>>> p.relative_to('/usr')535Traceback (most recent call last):536  File "<stdin>", line 1, in <module>537  File "pathlib.py", line 694, in relative_to538    .format(str(self), str(formatted)))539ValueError: '/etc/passwd' does not start with '/usr'540```541542#### `PurePath.with_name(name)`543544Возвращает новый путь с изменённым [`name`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PurePath.name). Если у исходного пути нет имени, вызывается ValueError:545546```python547>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')548>>> p.with_name('setup.py')549PureWindowsPath('c:/Downloads/setup.py')550>>> p = PureWindowsPath('c:/')551>>> p.with_name('setup.py')552Traceback (most recent call last):553  File "<stdin>", line 1, in <module>554  File "/home/antoine/cpython/default/Lib/pathlib.py", line 751, in with_name555    raise ValueError("%r has an empty name" % (self,))556ValueError: PureWindowsPath('c:/') has an empty name557```558559#### `PurePath.with_suffix(suffix)`560561Возвращает новый путь с изменённым [`suffix`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PurePath.suffix). Если исходный путь не имеет суффикса, вместо него добавляется новый *суффикс*:562563```python564>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')565>>> p.with_suffix('.bz2')566PureWindowsPath('c:/Downloads/pathlib.tar.bz2')567>>> p = PureWindowsPath('README')568>>> p.with_suffix('.txt')569PureWindowsPath('README.txt')570```571572## 11.1.3. Конкретные пути573574Конкретные пути – это подклассы чистых классов путей. В дополнение к операциям, предоставляемым последними, они также предоставляют методы для выполнения системных вызовов над объектами путей. Есть три способа создания конкретных путей:575576#### `class pathlib.Path(*pathsegments)`577578Подкласс [`PurePath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PurePath); этот класс представляет конкретные пути, соответствующие flavour данной файловой системы (при создании экземпляра создаётся либо [`PosixPath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PosixPath), либо [`WindowsPath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.WindowsPath)):579580```python581>>> Path('setup.py')582PosixPath('setup.py')583```584585Параметр *pathsegments* задаётся так же, как [`PurePath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PurePath).586587#### `class pathlib.PosixPath(*pathsegments)`588589Подкласс [`Path`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path) и [`PurePosixPath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PurePosixPath); этот класс представляет конкретные пути для файловых систем, отличных от Windows:590591```python592>>> PosixPath('/etc')593PosixPath('/etc')594```595596Параметр *pathsegments* задаётся так же, как [`PurePath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PurePath).597598#### `class pathlib.WindowsPath(*pathsegments)`599600Подкласс [`Path`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path) и [`PureWindowsPath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PureWindowsPath); этот класс представляет конкретные пути файловой системы Windows:601602```python603>>> WindowsPath('c:/Program Files/')604WindowsPath('c:/Program Files')605```606607Параметр *pathsegments* задаётся так же, как [`PurePath`](https://python-all.ru/3.5/library/pathlib.html#pathlib.PurePath).608609Можно создать экземпляр только того flavour класса, который соответствует системе (использование системных вызовов для несовместимых flavour путей может привести к ошибкам или сбоям в приложении):610611```python612>>> import os613>>> os.name614'posix'615>>> Path('setup.py')616PosixPath('setup.py')617>>> PosixPath('setup.py')618PosixPath('setup.py')619>>> WindowsPath('setup.py')620Traceback (most recent call last):621  File "<stdin>", line 1, in <module>622  File "pathlib.py", line 798, in __new__623    % (cls.__name__,))624NotImplementedError: cannot instantiate 'WindowsPath' on your system625```626627### 11.1.3.1. Методы628629Конкретные пути предоставляют следующие методы в дополнение к методам чистых путей методы. Многие из этих методов могут вызвать [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError), если системный вызов завершится неудачей (например, потому что путь не существует):630631#### `classmethod Path.cwd()`632633Возвращает новый объект пути, представляющий текущий каталог (как возвращается [`os.getcwd()`](https://python-all.ru/3.5/library/os.html#os.getcwd)):634635```python636>>> Path.cwd()637PosixPath('/home/antoine/pathlib')638```639640#### `classmethod Path.home()`641642Возвращает новый объект пути, представляющий домашний каталог пользователя (как возвращается [`os.path.expanduser()`](https://python-all.ru/3.5/library/os.path.html#os.path.expanduser) с конструкцией `~`):643644```python645>>> Path.home()646PosixPath('/home/antoine')647```648649Новое в версии 3.5.650651#### `Path.stat()`652653Возвращает информацию об этом пути (аналогично [`os.stat()`](https://python-all.ru/3.5/library/os.html#os.stat)). Результат запрашивается при каждом вызове этого метода.654655```python656>>> p = Path('setup.py')657>>> p.stat().st_size658956659>>> p.stat().st_mtime6601327883547.852554661```662663#### `Path.chmod(mode)`664665Изменяет режим файла и права доступа, как [`os.chmod()`](https://python-all.ru/3.5/library/os.html#os.chmod):666667```python668>>> p = Path('setup.py')669>>> p.stat().st_mode67033277671>>> p.chmod(0o444)672>>> p.stat().st_mode67333060674```675676#### `Path.exists()`677678Указывает ли путь на существующий файл или каталог:679680```python681>>> Path('.').exists()682True683>>> Path('setup.py').exists()684True685>>> Path('/etc').exists()686True687>>> Path('nonexistentfile').exists()688False689```690691> **Примечание**692>693> Если путь указывает на символическую ссылку, [`exists()`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path.exists) возвращает, *указывает ли* симлинк на существующий файл или каталог.694695#### `Path.expanduser()`696697Возвращает новый путь с развёрнутыми конструкциями `~` и `~user`, как возвращается функцией [`os.path.expanduser()`](https://python-all.ru/3.5/library/os.path.html#os.path.expanduser):698699```python700>>> p = PosixPath('~/films/Monty Python')701>>> p.expanduser()702PosixPath('/home/eric/films/Monty Python')703```704705Новое в версии 3.5.706707#### `Path.glob(pattern)`708709Выполняет поиск по заданному *шаблону* в каталоге, представленном этим путём, возвращая все соответствующие файлы (любого типа):710711```python712>>> sorted(Path('.').glob('*.py'))713[PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')]714>>> sorted(Path('.').glob('*/*.py'))715[PosixPath('docs/conf.py')]716```717718Шаблон «`**`» означает «этот каталог и все его подкаталоги рекурсивно». Другими словами, он включает рекурсивный поиск по шаблону:719720```python721>>> sorted(Path('.').glob('**/*.py'))722[PosixPath('build/lib/pathlib.py'),723 PosixPath('docs/conf.py'),724 PosixPath('pathlib.py'),725 PosixPath('setup.py'),726 PosixPath('test_pathlib.py')]727```728729> **Примечание**730>731> Использование шаблона «`**`» в больших деревьях каталогов может занять чрезмерно много времени.732733#### `Path.group()`734735Возвращает имя группы-владельца файла. [`KeyError`](https://python-all.ru/3.5/library/exceptions.html#KeyError) вызывается, если gid файла не найден в системной базе данных.736737#### `Path.is_dir()`738739Возвращает `True`, если путь указывает на каталог (или символическую ссылку на каталог), и `False`, если указывает на файл другого типа.740741`False` также возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.742743#### `Path.is_file()`744745Возвращает `True`, если путь указывает на обычный файл (или символическую ссылку на обычный файл), и `False`, если указывает на файл другого типа.746747`False` также возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.748749#### `Path.is_symlink()`750751Возвращает `True`, если путь указывает на символическую ссылку, иначе `False`.752753`False` также возвращается, если путь не существует; другие ошибки (например, ошибки прав доступа) передаются дальше.754755#### `Path.is_socket()`756757Возвращает `True`, если путь указывает на сокет Unix (или на символическую ссылку, указывающую на сокет Unix), `False` если он указывает на файл другого типа.758759`False` также возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.760761#### `Path.is_fifo()`762763Возвращает `True`, если путь указывает на FIFO (или на символическую ссылку, указывающую на FIFO), `False` если он указывает на файл другого типа.764765`False` также возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.766767#### `Path.is_block_device()`768769Возвращает `True`, если путь указывает на блочное устройство (или на символическую ссылку, указывающую на блочное устройство), `False` если он указывает на файл другого типа.770771`False` также возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.772773#### `Path.is_char_device()`774775Возвращает `True`, если путь указывает на символьное устройство (или на символическую ссылку, указывающую на символьное устройство), `False` если он указывает на файл другого типа.776777`False` также возвращается, если путь не существует или является битой символьной ссылкой; другие ошибки (например, ошибки прав доступа) передаются.778779#### `Path.iterdir()`780781Если путь указывает на каталог, возвращает объекты пути для его содержимого:782783```python784>>> p = Path('docs')785>>> for child in p.iterdir(): child786...787PosixPath('docs/conf.py')788PosixPath('docs/_templates')789PosixPath('docs/make.bat')790PosixPath('docs/index.rst')791PosixPath('docs/_build')792PosixPath('docs/_static')793PosixPath('docs/Makefile')794```795796#### `Path.lchmod(mode)`797798Как [`Path.chmod()`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path.chmod), но если путь указывает на символьную ссылку, то изменяется режим самой символьной ссылки, а не её цели.799800#### `Path.lstat()`801802Как [`Path.stat()`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path.stat), но если путь указывает на симлинк, возвращает информацию о симлинке, а не о его цели.803804#### `Path.mkdir(mode=0o777, parents=False, exist_ok=False)`805806Создаёт новый каталог по указанному пути. Если указан параметр *mode*, он комбинируется со значением `umask` процесса для определения режима файла и флагов доступа. Если путь уже существует, [`FileExistsError`](https://python-all.ru/3.5/library/exceptions.html#FileExistsError) вызывается.807808Если *parents* равен true, любые отсутствующие родительские каталоги этого пути создаются по мере необходимости; они создаются с правами по умолчанию без учёта *mode* (имитируя команду POSIX `mkdir -p`).809810Если *parents* равен false (по умолчанию), отсутствие родительского каталога вызывает [`FileNotFoundError`](https://python-all.ru/3.5/library/exceptions.html#FileNotFoundError).811812Если *exist\_ok* равен false (по умолчанию), [`FileExistsError`](https://python-all.ru/3.5/library/exceptions.html#FileExistsError) возбуждается, если целевой каталог уже существует.813814Если *exist\_ok* имеет значение true, [`FileExistsError`](https://python-all.ru/3.5/library/exceptions.html#FileExistsError) исключения будут проигнорированы (аналогично поведению команды POSIX `mkdir -p`), но только если последний компонент пути не является существующим файлом, отличным от каталога.815816Изменено в версии 3.5: Добавлен параметр *exist\_ok*.817818#### `Path.open(mode='r', buffering=-1, encoding=None, errors=None, newline=None)`819820Открывает файл, на который указывает путь, как это делает встроенная функция [`open()`](https://python-all.ru/3.5/library/functions.html#open) :821822```python823>>> p = Path('setup.py')824>>> with p.open() as f:825...     f.readline()826...827'#!/usr/bin/env python3\n'828```829830#### `Path.owner()`831832Возвращает имя пользователя-владельца файла. [`KeyError`](https://python-all.ru/3.5/library/exceptions.html#KeyError) вызывается, если uid файла не найден в системной базе данных.833834#### `Path.read_bytes()`835836Возвращает двоичное содержимое файла, на который указывает путь, в виде объекта bytes:837838```python839>>> p = Path('my_binary_file')840>>> p.write_bytes(b'Binary file contents')84120842>>> p.read_bytes()843b'Binary file contents'844```845846Новое в версии 3.5.847848#### `Path.read_text(encoding=None, errors=None)`849850Возвращает декодированное содержимое файла, на который указывает путь, в виде строки:851852```python853>>> p = Path('my_text_file')854>>> p.write_text('Text file contents')85518856>>> p.read_text()857'Text file contents'858```859860Необязательные параметры имеют то же значение, что и в [`open()`](https://python-all.ru/3.5/library/functions.html#open).861862Новое в версии 3.5.863864#### `Path.rename(target)`865866Переименовывает этот файл или каталог в указанный *target*. В Unix, если *target* существует и является файлом, он будет бесшумно заменён, если у пользователя есть соответствующие права. *target* может быть как строкой, так и другим объектом пути:867868```python869>>> p = Path('foo')870>>> p.open('w').write('some text')8719872>>> target = Path('bar')873>>> p.rename(target)874>>> target.open().read()875'some text'876```877878#### `Path.replace(target)`879880Переименовывает этот файл или каталог в указанный *target*. Если *target* указывает на существующий файл или каталог, он будет безусловно заменён.881882#### `Path.resolve()`883884Делает путь абсолютным, разрешая все символические ссылки. Возвращается новый объект пути:885886```python887>>> p = Path()888>>> p889PosixPath('.')890>>> p.resolve()891PosixPath('/home/antoine/pathlib')892```893894`..`” компоненты также удаляются (это единственный метод, который это делает):895896```python897>>> p = Path('docs/../setup.py')898>>> p.resolve()899PosixPath('/home/antoine/pathlib/setup.py')900```901902Если путь не существует, возбуждается [`FileNotFoundError`](https://python-all.ru/3.5/library/exceptions.html#FileNotFoundError). Если при разрешении пути встречается бесконечный цикл, возбуждается [`RuntimeError`](https://python-all.ru/3.5/library/exceptions.html#RuntimeError).903904#### `Path.rglob(pattern)`905906Это похоже на вызов [`Path.glob()`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path.glob) с добавлением “`**`” перед заданным *шаблоном*:907908```python909>>> sorted(Path().rglob("*.py"))910[PosixPath('build/lib/pathlib.py'),911 PosixPath('docs/conf.py'),912 PosixPath('pathlib.py'),913 PosixPath('setup.py'),914 PosixPath('test_pathlib.py')]915```916917#### `Path.rmdir()`918919Удаляет этот каталог. Каталог должен быть пустым.920921#### `Path.samefile(other_path)`922923Возвращает, указывает ли этот путь на тот же файл, что и *other\_path*, который может быть как объектом Path, так и строкой. Семантика аналогична [`os.path.samefile()`](https://python-all.ru/3.5/library/os.path.html#os.path.samefile) и [`os.path.samestat()`](https://python-all.ru/3.5/library/os.path.html#os.path.samestat).924925Исключение [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError) может быть возбуждено, если какой-либо из файлов недоступен по какой-либо причине.926927```python928>>> p = Path('spam')929>>> q = Path('eggs')930>>> p.samefile(q)931False932>>> p.samefile('spam')933True934```935936Новое в версии 3.5.937938#### `Path.symlink_to(target, target_is_directory=False)`939940Сделать этот путь символической ссылкой на *target*. В Windows *target\_is\_directory* должно иметь значение true (по умолчанию `False`), если цель ссылки является каталогом. В POSIX значение *target\_is\_directory* игнорируется.941942```python943>>> p = Path('mylink')944>>> p.symlink_to('setup.py')945>>> p.resolve()946PosixPath('/home/antoine/pathlib/setup.py')947>>> p.stat().st_size948956949>>> p.lstat().st_size9508951```952953> **Примечание**954>955> Порядок аргументов (ссылка, цель) обратный по сравнению с [`os.symlink()`](https://python-all.ru/3.5/library/os.html#os.symlink).956957#### `Path.touch(mode=0o666, exist_ok=True)`958959Создаёт файл по указанному пути. Если задан *mode*, он комбинируется со значением `umask` процесса для определения режима файла и флагов доступа. Если файл уже существует, функция завершается успешно, если *exist\_ok* равен true (при этом время изменения файла обновляется до текущего), в противном случае вызывается исключение [`FileExistsError`](https://python-all.ru/3.5/library/exceptions.html#FileExistsError).960961#### `Path.unlink()`962963Удаляет этот файл или символическую ссылку. Если путь указывает на каталог, используйте [`Path.rmdir()`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path.rmdir).964965#### `Path.write_bytes(data)`966967Открывает файл в байтовом режиме, записывает в него *data* и закрывает файл:968969```python970>>> p = Path('my_binary_file')971>>> p.write_bytes(b'Binary file contents')97220973>>> p.read_bytes()974b'Binary file contents'975```976977Существующий файл с таким же именем перезаписывается.978979Новое в версии 3.5.980981#### `Path.write_text(data, encoding=None, errors=None)`982983Открывает файл в текстовом режиме, записывает в него *data* и закрывает файл:984985```python986>>> p = Path('my_text_file')987>>> p.write_text('Text file contents')98818989>>> p.read_text()990'Text file contents'991```992993Новое в версии 3.5.994