pathlib — Объектно-ориентированные пути к файлам системы
Новая в версии 3.4.
Исходный код: Lib/pathlib.py
Этот модуль предлагает классы, представляющие пути к файлам системы с семантикой, подходящей для разных операционных систем. Классы путей разделены на чистые пути, которые обеспечивают чисто вычислительные операции без ввода-вывода, и конкретные пути, которые наследуют от чистых путей, но также предоставляют операции ввода-вывода.
Если вы никогда не использовали этот модуль раньше или просто не уверены, какой класс подходит для вашей задачи, Path наиболее вероятно, что вам нужно. Он создаёт конкретный путь для платформы, на которой выполняется код.
Чистые пути полезны в некоторых особых случаях; например:
- Если вы хотите манипулировать путями Windows на машине Unix (или наоборот). Вы не можете создать
WindowsPathпри запуске на Unix, но вы можете создатьPureWindowsPath. - Вы хотите убедиться, что ваш код манипулирует путями, не обращаясь к ОС. В этом случае создание одного из чистых классов может быть полезным, так как у них просто нет операций доступа к ОС.
Примечание
Этот модуль включён в стандартную библиотеку на временной основе. Несовместимые с предыдущими версиями изменения (вплоть до удаления пакета) могут произойти, если это будет сочтено необходимым разработчиками ядра.
См. также
PEP 428: Модуль pathlib — объектно-ориентированные пути к файлам системы.
См. также
Для манипулирования путями на строках низкого уровня можно также использовать модуль os.path.
1. Базовое использование
Импортирование основного класса:
>>> from pathlib import Path
Вывод подкаталогов:
>>> p = Path('.')
>>> [x for x in p.iterdir() if x.is_dir()]
[PosixPath('.hg'), PosixPath('docs'), PosixPath('dist'),
PosixPath('__pycache__'), PosixPath('build')]
Вывод файлов исходного кода Python в этой древовидной структуре каталогов:
>>> list(p.glob('**/*.py'))
[PosixPath('test_pathlib.py'), PosixPath('setup.py'),
PosixPath('pathlib.py'), PosixPath('docs/conf.py'),
PosixPath('build/lib/pathlib.py')]
Перемещение внутри древовидной структуры каталогов:
>>> p = Path('/etc')
>>> q = p / 'init.d' / 'reboot'
>>> q
PosixPath('/etc/init.d/reboot')
>>> q.resolve()
PosixPath('/etc/rc.d/init.d/halt')
Запрос свойств пути:
>>> q.exists() True >>> q.is_dir() False
Открытие файла:
>>> with q.open() as f: f.readline() ... '#!/bin/bash\n'
2. Чистые пути
Объекты чистых путей предоставляют операции обработки путей, которые фактически не обращаются к файловой системе. Существует три способа доступа к этим классам, которые мы также называем вариантами:
-
class pathlib.PurePath(*pathsegments) -
Общий класс, который представляет вариант пути системы (создание его создаёт либо
PurePosixPath, либоPureWindowsPath):>>> PurePath('setup.py') # Running on a Unix machine PurePosixPath('setup.py')Каждый элемент pathsegments может быть либо строкой, представляющей сегмент пути, либо другим объектом пути:
>>> PurePath('foo', 'some/path', 'bar') PurePosixPath('foo/some/path/bar') >>> PurePath(Path('foo'), Path('bar')) PurePosixPath('foo/bar')Когда pathsegments пусто, предполагается текущая директория:
>>> PurePath() PurePosixPath('.')Когда указано несколько абсолютных путей, последний используется как якорь (подражая поведению
os.path.join()):>>> PurePath('/etc', '/usr', 'lib64') PurePosixPath('/usr/lib64') >>> PureWindowsPath('c:/Windows', 'd:bar') PureWindowsPath('d:bar')Однако в пути Windows изменение локального корня не отбрасывает предыдущую установку диска:
>>> PureWindowsPath('c:/Windows', '/Program Files') PureWindowsPath('c:/Program Files')Избыточные косые черты и одиночные точки сворачиваются, но двойные точки (
'..') нет, так как это изменит смысл пути при наличии символических ссылок:>>> PurePath('foo//bar') PurePosixPath('foo/bar') >>> PurePath('foo/./bar') PurePosixPath('foo/bar') >>> PurePath('foo/../bar') PurePosixPath('foo/../bar')(примитивный подход сделал бы
PurePosixPath('foo/../bar')эквивалентнымPurePosixPath('bar'), что неверно, еслиfooявляется символической ссылкой на другую директорию)
-
class pathlib.PurePosixPath(*pathsegments) -
Подкласс
PurePath, этот вариант пути представляет пути файловой системы, отличные от Windows:>>> PurePosixPath('/etc') PurePosixPath('/etc')pathsegments задаётся аналогично
PurePath.
-
class pathlib.PureWindowsPath(*pathsegments) -
Подкласс
PurePath, этот вариант пути представляет пути файловой системы Windows:>>> PureWindowsPath('c:/Program Files/') PureWindowsPath('c:/Program Files')pathsegments задаётся аналогично
PurePath.
Независимо от операционной системы, на которой вы работаете, вы можете создать все эти классы, так как они не предоставляют операций, которые выполняют системные вызовы.
2.1. Общие свойства
Пути неизменяемы и хешируемы. Пути одного и того же варианта сравнимы и упорядочиваемы. Эти свойства учитывают семантику преобразования регистра варианта:
>>> PurePosixPath('foo') == PurePosixPath('FOO')
False
>>> PureWindowsPath('foo') == PureWindowsPath('FOO')
True
>>> PureWindowsPath('FOO') in { PureWindowsPath('foo') }
True
>>> PureWindowsPath('C:') < PureWindowsPath('d:')
True
Пути разных вариантов считаются несравнимыми и не могут быть упорядочены:
>>> PureWindowsPath('foo') == PurePosixPath('foo')
False
>>> PureWindowsPath('foo') < PurePosixPath('foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: PureWindowsPath() < PurePosixPath()
2.2. Операторы
Оператор косой черты помогает создать дочерние пути, аналогично os.path.join():
>>> p = PurePath('/etc')
>>> p
PurePosixPath('/etc')
>>> p / 'init.d' / 'apache2'
PurePosixPath('/etc/init.d/apache2')
>>> q = PurePath('bin')
>>> '/usr' / q
PurePosixPath('/usr/bin')
Строковое представление пути — это сам путь файловой системы (в родном формате, например, с обратными слешами в Windows), который вы можете передать любой функции, принимающей путь к файлу в виде строки:
>>> p = PurePath('/etc')
>>> str(p)
'/etc'
>>> p = PureWindowsPath('c:/Program Files')
>>> str(p)
'c:\\Program Files'
Аналогично, вызов bytes для пути возвращает исходный путь файловой системы в виде объекта bytes, закодированного функцией os.fsencode():
>>> bytes(p) b'/etc'
Примечание
Вызов bytes рекомендуется только в Unix. В Windows формой Unicode является каноническое представление путей к файлам.
2.3. Доступ к отдельным частям
Для доступа к отдельным «частям» (компонентам) пути используйте следующее свойство:
-
PurePath.parts -
Кортеж, обеспечивающий доступ к различным компонентам пути:
>>> p = PurePath('/usr/bin/python3') >>> p.parts ('/', 'usr', 'bin', 'python3') >>> p = PureWindowsPath('c:/Program Files/PSF') >>> p.parts ('c:\\', 'Program Files', 'PSF')(Обратите внимание, как диск и локальный корень объединяются в одну часть)
2.4. Методы и свойства
Чистые пути предоставляют следующие методы и свойства:
-
PurePath.drive -
Строка, представляющая букву диска или имя, если оно есть:
>>> PureWindowsPath('c:/Program Files/').drive 'c:' >>> PureWindowsPath('/Program Files/').drive '' >>> PurePosixPath('/etc').drive ''Общий доступ к UNC также рассматривается как диск:
>>> PureWindowsPath('//host/share/foo.txt').drive '\\\\host\\share'
-
PurePath.root -
Строка, представляющая (локальный или глобальный) корень, если он есть:
>>> PureWindowsPath('c:/Program Files/').root '\\' >>> PureWindowsPath('c:Program Files/').root '' >>> PurePosixPath('/etc').root '/'У UNC-общих ресурсов всегда есть корень:
>>> PureWindowsPath('//host/share').root '\\'
-
PurePath.anchor -
Объединение диска и корня:
>>> PureWindowsPath('c:/Program Files/').anchor 'c:\\' >>> PureWindowsPath('c:Program Files/').anchor 'c:' >>> PurePosixPath('/etc').anchor '/' >>> PureWindowsPath('//host/share').anchor '\\\\host\\share\\'
-
PurePath.parents -
Неизменяемая последовательность, обеспечивающая доступ к логическим предкам пути:
>>> p = PureWindowsPath('c:/foo/bar/setup.py') >>> p.parents[0] PureWindowsPath('c:/foo/bar') >>> p.parents[1] PureWindowsPath('c:/foo') >>> p.parents[2] PureWindowsPath('c:/')
-
PurePath.parent -
Логический родитель пути:
>>> p = PurePosixPath('/a/b/c/d') >>> p.parent PurePosixPath('/a/b/c')Вы не можете перейти за якорь или пустой путь:
>>> p = PurePosixPath('/') >>> p.parent PurePosixPath('/') >>> p = PurePosixPath('.') >>> p.parent PurePosixPath('.')Примечание
Это чисто лексическая операция, следовательно, следующее поведение:
>>> p = PurePosixPath('foo/..') >>> p.parent PurePosixPath('foo')Если вам нужно пройти по произвольному пути файловой системы вверх, рекомендуется сначала вызвать
Path.resolve(), чтобы разрешить символические ссылки и устранить“..”компоненты.
-
PurePath.name -
Строка, представляющая последний компонент пути, исключая диск и корень, если они есть:
>>> PurePosixPath('my/library/setup.py').name 'setup.py'Имена дисков UNC не рассматриваются:
>>> PureWindowsPath('//some/share/setup.py').name 'setup.py' >>> PureWindowsPath('//some/share').name ''
-
PurePath.suffix -
Расширение файла последнего компонента, если оно есть:
>>> PurePosixPath('my/library/setup.py').suffix '.py' >>> PurePosixPath('my/library.tar.gz').suffix '.gz' >>> PurePosixPath('my/library').suffix ''
-
PurePath.suffixes -
Список расширений файла пути:
>>> PurePosixPath('my/library.tar.gar').suffixes ['.tar', '.gar'] >>> PurePosixPath('my/library.tar.gz').suffixes ['.tar', '.gz'] >>> PurePosixPath('my/library').suffixes []
-
PurePath.stem -
Последний компонент пути без расширения:
>>> PurePosixPath('my/library.tar.gz').stem 'library.tar' >>> PurePosixPath('my/library.tar').stem 'library' >>> PurePosixPath('my/library').stem 'library'
-
PurePath.as_posix() -
Возвращает строковое представление пути с прямыми слешами (
/):>>> p = PureWindowsPath('c:\\windows') >>> str(p) 'c:\\windows' >>> p.as_posix() 'c:/windows'
-
PurePath.as_uri() -
Представляет путь как
fileURI.ValueErrorвыбрасывается, если путь не абсолютный.>>> p = PurePosixPath('/etc/passwd') >>> p.as_uri() 'file:///etc/passwd' >>> p = PureWindowsPath('c:/Windows') >>> p.as_uri() 'file:///c:/Windows'
-
PurePath.is_absolute() -
Возвращает, является ли путь абсолютным или нет. Путь считается абсолютным, если у него есть корень и (если вариант допускает) диск:
>>> PurePosixPath('/a/b').is_absolute() True >>> PurePosixPath('a/b').is_absolute() False >>> PureWindowsPath('c:/a/b').is_absolute() True >>> PureWindowsPath('/a/b').is_absolute() False >>> PureWindowsPath('c:').is_absolute() False >>> PureWindowsPath('//some/share').is_absolute() True
-
PurePath.is_reserved() -
При использовании
PureWindowsPath, возвращает значениеTrue, если путь считается зарезервированным в Windows,Falseв противном случае. При использованииPurePosixPath, всегда возвращаетсяFalse.>>> PureWindowsPath('nul').is_reserved() True >>> PurePosixPath('nul').is_reserved() FalseСистемные вызовы для зарезервированных путей могут завершаться непонятным образом или иметь непредвиденные последствия.
-
PurePath.joinpath(*other) -
Вызов этого метода эквивалентен объединению пути с каждым из других аргументов по очереди:
>>> PurePosixPath('/etc').joinpath('passwd') PurePosixPath('/etc/passwd') >>> PurePosixPath('/etc').joinpath(PurePosixPath('passwd')) PurePosixPath('/etc/passwd') >>> PurePosixPath('/etc').joinpath('init.d', 'apache2') PurePosixPath('/etc/init.d/apache2') >>> PureWindowsPath('c:').joinpath('/Program Files') PureWindowsPath('c:/Program Files')
-
PurePath.match(pattern) -
Сопоставить этот путь с заданным шаблоном в стиле glob. Возвращает
True, если сопоставление успешно,Falseв противном случае.Если шаблон относительный, путь может быть как относительным, так и абсолютным, а сопоставление выполняется справа налево:
>>> PurePath('a/b.py').match('*.py') True >>> PurePath('/a/b/c.py').match('b/*.py') True >>> PurePath('/a/b/c.py').match('a/*.py') FalseЕсли шаблон абсолютный, путь также должен быть абсолютным, и весь путь должен совпадать:
>>> PurePath('/a.py').match('/*.py') True >>> PurePath('a/b.py').match('/*.py') FalseКак и в других методах, учитывается регистр символов:
>>> PureWindowsPath('b.py').match('*.PY') True
-
PurePath.relative_to(*other) -
Вычислить версию этого пути, относительную к пути, представленному other. Если это невозможно, возникает исключение ValueError:
>>> p = PurePosixPath('/etc/passwd') >>> p.relative_to('/') PurePosixPath('etc/passwd') >>> p.relative_to('/etc') PurePosixPath('passwd') >>> p.relative_to('/usr') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "pathlib.py", line 694, in relative_to .format(str(self), str(formatted))) ValueError: '/etc/passwd' does not start with '/usr'
-
PurePath.with_name(name) -
Возвращает новый путь с изменённым
name. Если у исходного пути нет имени, возникает исключение ValueError:>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz') >>> p.with_name('setup.py') PureWindowsPath('c:/Downloads/setup.py') >>> p = PureWindowsPath('c:/') >>> p.with_name('setup.py') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/antoine/cpython/default/Lib/pathlib.py", line 751, in with_name raise ValueError("%r has an empty name" % (self,)) ValueError: PureWindowsPath('c:/') has an empty name
-
PurePath.with_suffix(suffix) -
Возвращает новый путь с изменённым
suffix. Если у исходного пути нет суффикса, новый suffix добавляется вместо него:>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz') >>> p.with_suffix('.bz2') PureWindowsPath('c:/Downloads/pathlib.tar.bz2') >>> p = PureWindowsPath('README') >>> p.with_suffix('.txt') PureWindowsPath('README.txt')
3. Конкретные пути
Конкретные пути являются подклассами чистых классов путей. В дополнение к операциям, предоставляемым последними, они также предоставляют методы для выполнения системных вызовов на объектах пути. Существует три способа создания конкретных путей:
-
class pathlib.Path(*pathsegments) -
Этот подкласс
PurePathпредставляет конкретные пути с форматом пути системы (создание объекта приводит к созданию либоPosixPath, либоWindowsPath):>>> Path('setup.py') PosixPath('setup.py')pathsegments задаётся аналогично
PurePath.
-
class pathlib.PosixPath(*pathsegments) -
Этот подкласс
PathиPurePosixPathпредставляет конкретные пути файловой системы, не являющиеся Windows:>>> PosixPath('/etc') PosixPath('/etc')pathsegments задаётся аналогично
PurePath.
-
class pathlib.WindowsPath(*pathsegments) -
Этот подкласс
PathиPureWindowsPathпредставляет конкретные пути файловой системы Windows:>>> WindowsPath('c:/Program Files/') WindowsPath('c:/Program Files')pathsegments задаётся аналогично
PurePath.
Вы можете создавать объекты только того класса, который соответствует вашей системе (использование объектов пути с несовместимым форматом может привести к ошибкам или сбоям в приложении):
>>> import os
>>> os.name
'posix'
>>> Path('setup.py')
PosixPath('setup.py')
>>> PosixPath('setup.py')
PosixPath('setup.py')
>>> WindowsPath('setup.py')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pathlib.py", line 798, in __new__
% (cls.__name__,))
NotImplementedError: cannot instantiate 'WindowsPath' on your system
3.1. Методы
Конкретные пути предоставляют следующие методы в дополнение к методам чистых путей. Многие из этих методов могут вызывать исключение OSError, если системный вызов завершается ошибкой (например, из-за отсутствия пути):
-
classmethod Path.cwd() -
Возвращает новый объект пути, представляющий текущую директорию (как возвращает
os.getcwd()):>>> Path.cwd() PosixPath('/home/antoine/pathlib')
-
classmethod Path.home() -
Возвращает новый объект пути, представляющий домашнюю директорию пользователя (как возвращает
os.path.expanduser()с~конструкцией):>>> Path.home() PosixPath('/home/antoine')Введено в версии 3.5.
-
Path.stat() -
Возвращает информацию об этом пути (аналогично
os.stat()). Результат вычисляется при каждом вызове этого метода.>>> p = Path('setup.py') >>> p.stat().st_size 956 >>> p.stat().st_mtime 1327883547.852554
-
Path.chmod(mode) -
Изменяет режим и разрешения файла, как
os.chmod():>>> p = Path('setup.py') >>> p.stat().st_mode 33277 >>> p.chmod(0o444) >>> p.stat().st_mode 33060
-
Path.exists() -
Указывает, ссылается ли путь на существующий файл или директорию:
>>> Path('.').exists() True >>> Path('setup.py').exists() True >>> Path('/etc').exists() True >>> Path('nonexistentfile').exists() FalseПримечание
Если путь ссылается на символическую ссылку,
exists()возвращает значение, указывающее, ссылается ли символическая ссылка на существующий файл или директорию.
-
Path.expanduser() -
Возвращает новый путь с расширенными
~и~userконструкциями, как возвращаетos.path.expanduser():>>> p = PosixPath('~/films/Monty Python') >>> p.expanduser() PosixPath('/home/eric/films/Monty Python')Введено в версии 3.5.
-
Path.glob(pattern) -
Выполняет поиск по шаблону pattern в каталоге, представленном этим путём, возвращая все соответствующие файлы (любого типа):
>>> sorted(Path('.').glob('*.py')) [PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')] >>> sorted(Path('.').glob('*/*.py')) [PosixPath('docs/conf.py')]Шаблон «
**» означает «текущий каталог и все подкаталоги, рекурсивно». Другими словами, он включает рекурсивный поиск:>>> sorted(Path('.').glob('**/*.py')) [PosixPath('build/lib/pathlib.py'), PosixPath('docs/conf.py'), PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')]Примечание
Использование шаблона «
**» в больших иерархиях каталогов может занять значительное время.
-
Path.group() -
Возвращает имя группы, владеющей файлом. Если идентификатор группы файла не найден в системной базе данных, возникает исключение
KeyError.
-
Path.is_dir() -
Возвращает
True, если путь указывает на директорию (или символическую ссылку на директорию),Falseесли он указывает на другой тип файла.Также возвращает
False, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются вверх.
-
Path.is_file() -
Возвращает
True, если путь указывает на обычный файл (или символическую ссылку на обычный файл),Falseесли он указывает на другой тип файла.Также возвращает
False, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются вверх.
-
Path.is_symlink() -
Возвращает
True, если путь указывает на символическую ссылку,Falseв противном случае.Также возвращает
False, если путь не существует; другие ошибки (например, ошибки доступа) передаются вверх.
-
Path.is_socket() -
Возвращает
True, если путь указывает на сокет Unix (или символическую ссылку на сокет Unix),Falseесли он указывает на другой тип файла.Также возвращает
False, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются вверх.
-
Path.is_fifo() -
Возвращает
True, если путь указывает на FIFO (или символическую ссылку на FIFO),Falseесли он указывает на другой тип файла.Также возвращает
False, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются вверх.
-
Path.is_block_device() -
Возвращает
True, если путь указывает на блок-устройство (или символическую ссылку на блок-устройство),Falseесли он указывает на другой тип файла.Также возвращает
False, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются вверх.
-
Path.is_char_device() -
Возвращает
True, если путь указывает на символьное устройство (или символическую ссылку на символьное устройство),Falseесли он указывает на другой тип файла.Также возвращает
False, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются вверх.
-
Path.iterdir() -
Если путь указывает на директорию, возвращает объекты пути содержимого директории:
>>> p = Path('docs') >>> for child in p.iterdir(): child ... PosixPath('docs/conf.py') PosixPath('docs/_templates') PosixPath('docs/make.bat') PosixPath('docs/index.rst') PosixPath('docs/_build') PosixPath('docs/_static') PosixPath('docs/Makefile')
-
Path.lchmod(mode) -
Аналогично
Path.chmod(), но если путь указывает на символическую ссылку, то изменяется атрибут режима символической ссылки, а не её целевого объекта.
-
Path.lstat() -
Аналогично
Path.stat(), но если путь указывает на символическую ссылку, то возвращается информация о символической ссылке, а не её целевого объекта.
-
Path.mkdir(mode=0o777, parents=False, exist_ok=False) -
Создаёт новую директорию по указанному пути. Если параметр mode задан, он комбинируется с значением
umaskтекущего процесса, чтобы определить атрибуты режима и доступа к файлу. Если путь уже существует, генерируется исключениеFileExistsError.Если parents имеет значение
True, то все недостающие родительские директории создаются по мере необходимости; они создаются с установленными по умолчанию правами без учёта параметра mode (подражая команде POSIXmkdir -p).Если parents имеет значение
False(по умолчанию), отсутствие родительской директории приводит к исключениюFileNotFoundError.Если exist_ok имеет значение
False(по умолчанию), при существовании целевой директории генерируется исключениеFileExistsError.Если exist_ok имеет значение
True, исключенияFileExistsErrorбудут игнорироваться (такое же поведение, как у команды POSIXmkdir -p), но только если последний компонент пути не является существующим файлом, который не является директорией.Изменено в версии 3.5: Добавлен параметр exist_ok.
-
Path.open(mode='r', buffering=-1, encoding=None, errors=None, newline=None) -
Открывает файл по указанному пути, как встроенная функция
open():>>> p = Path('setup.py') >>> with p.open() as f: ... f.readline() ... '#!/usr/bin/env python3\n'
-
Path.owner() -
Возвращает имя пользователя, являющегося владельцем файла. Возникает исключение
KeyError, если uid файла не найден в системной базе данных.
-
Path.read_bytes() -
Возвращает двоичное содержимое указанного файла в виде объекта bytes:
>>> p = Path('my_binary_file') >>> p.write_bytes(b'Binary file contents') 20 >>> p.read_bytes() b'Binary file contents'Новое в версии 3.5.
-
Path.read_text(encoding=None, errors=None) -
Возвращает декодированное содержимое указанного файла в виде строки:
>>> p = Path('my_text_file') >>> p.write_text('Text file contents') 18 >>> p.read_text() 'Text file contents'Дополнительные параметры имеют такое же значение, как и в
open().Новое в версии 3.5.
-
Path.rename(target) -
Переименовывает этот файл или директорию на указанное имя target. В Unix-системах, если target существует и является файлом, он будет заменён без предупреждения, если у пользователя есть соответствующие права. target может быть строкой или другим объектом Path:
>>> p = Path('foo') >>> p.open('w').write('some text') 9 >>> target = Path('bar') >>> p.rename(target) >>> target.open().read() 'some text'
-
Path.replace(target) -
Переименовывает этот файл или директорию на указанное имя target. Если target указывает на существующий файл или директорию, он будет безусловно заменён.
-
Path.resolve() -
Преобразует путь в абсолютный, разрешая все символические ссылки. Возвращается новый объект Path:
>>> p = Path() >>> p PosixPath('.') >>> p.resolve() PosixPath('/home/antoine/pathlib')Компоненты «
..» также удаляются (это единственный способ сделать это):>>> p = Path('docs/../setup.py') >>> p.resolve() PosixPath('/home/antoine/pathlib/setup.py')Если путь не существует, возникает исключение
FileNotFoundError. Если во время разрешения пути обнаружена бесконечная петля, возникает исключениеRuntimeError.
-
Path.rglob(pattern) -
Это эквивалентно вызову
Path.glob()с добавлением «**» перед заданным шаблоном pattern:>>> sorted(Path().rglob("*.py")) [PosixPath('build/lib/pathlib.py'), PosixPath('docs/conf.py'), PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')]
-
Path.rmdir() -
Удаляет директорию. Директория должна быть пустой.
-
Path.samefile(other_path) -
Возвращает
True, если этот путь указывает на тот же файл, что и other_path, который может быть объектом Path или строкой. Семантика аналогичнаos.path.samefile()иos.path.samestat().Исключение
OSErrorможет возникнуть, если к одному из файлов невозможно получить доступ по какой-либо причине.>>> p = Path('spam') >>> q = Path('eggs') >>> p.samefile(q) False >>> p.samefile('spam') TrueНовое в версии 3.5.
-
Path.symlink_to(target, target_is_directory=False) -
Преобразует этот путь в символическую ссылку на target. В Windows, target_is_directory должно быть
True(по умолчаниюFalse), если целевой объект ссылки является директорией. В POSIX системах значение target_is_directory игнорируется.>>> p = Path('mylink') >>> p.symlink_to('setup.py') >>> p.resolve() PosixPath('/home/antoine/pathlib/setup.py') >>> p.stat().st_size 956 >>> p.lstat().st_size 8Примечание
Порядок аргументов (ссылка, цель) обратный по сравнению с
os.symlink().
-
Path.touch(mode=0o666, exist_ok=True) -
Создаёт файл по указанному пути. Если параметр mode задан, он комбинируется со значением
umaskтекущего процесса, чтобы определить атрибуты режима и доступа к файлу. Если файл уже существует, функция выполняется успешно, если exist_ok равноTrue(и время его последней модификации обновляется до текущего времени), в противном случае генерируется исключениеFileExistsError.
-
Path.unlink() -
Удаляет этот файл или символическую ссылку. Если путь указывает на директорию, используйте
Path.rmdir()вместо этого.
-
Path.write_bytes(data) -
Открывает файл в двоичном режиме, записывает data в него и закрывает файл:
>>> p = Path('my_binary_file') >>> p.write_bytes(b'Binary file contents') 20 >>> p.read_bytes() b'Binary file contents'Существующий файл с таким же именем будет перезаписан.
Новое в версии 3.5.
-
Path.write_text(data, encoding=None, errors=None) -
Открывает файл в текстовом режиме, записывает data в него и закрывает файл:
>>> p = Path('my_text_file') >>> p.write_text('Text file contents') 18 >>> p.read_text() 'Text file contents'Новое в версии 3.5.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.5/library/pathlib.html