pathlib — Объектно-ориентированные пути к файлам в файловой системе
Новое в версии 3.4.
Исходный код: Lib/pathlib.py
Этот модуль предлагает классы, представляющие пути к файлам в файловой системе, с семантикой, подходящей для различных операционных систем. Классы путей делятся на чистые пути, которые предоставляют чисто вычислительные операции без ввода-вывода, и конкретные пути, которые наследуются от чистых путей, но также предоставляют операции ввода-вывода.
Если вы никогда не использовали этот модуль раньше или просто не уверены, какой класс подходит для вашей задачи, Path — это, скорее всего, то, что вам нужно. Он создаёт конкретный путь для платформы, на которой работает код.
Чистые пути полезны в некоторых особых случаях; например:
- Если вы хотите манипулировать путями Windows на машине Unix (или наоборот). Вы не можете создать экземпляр
WindowsPathпри работе на Unix, но вы можете создать экземплярPureWindowsPath. - Вы хотите убедиться, что ваш код манипулирует путями, не обращаясь непосредственно к ОС. В этом случае создание одного из чистых классов может быть полезным, так как они просто не имеют операций доступа к ОС.
См. также
PEP 428: Модуль pathlib — объектно-ориентированные пути к файлам в файловой системе.
См. также
Для манипулирования путями на уровне строк вы также можете использовать модуль os.path.
Основное использование
Импорт основного класса:
>>> from pathlib import Path
Вывод списка подкаталогов:
>>> p = Path('.')
>>> [x for x in p.iterdir() if x.is_dir()]
[PosixPath('.hg'), PosixPath('docs'), PosixPath('dist'),
PosixPath('__pycache__'), PosixPath('build')]
Вывод списка файлов Python в этой дереве каталогов:
>>> list(p.glob('**/*.py'))
[PosixPath('test_pathlib.py'), PosixPath('setup.py'),
PosixPath('pathlib.py'), PosixPath('docs/conf.py'),
PosixPath('build/lib/pathlib.py')]
Перемещение по дереву каталогов:
>>> p = Path('/etc')
>>> q = p / 'init.d' / 'reboot'
>>> q
PosixPath('/etc/init.d/reboot')
>>> q.resolve()
PosixPath('/etc/rc.d/init.d/halt')
Запрос свойств пути:
>>> q.exists() True >>> q.is_dir() False
Открытие файла:
>>> with q.open() as f: f.readline() ... '#!/bin/bash\n'
Чистые пути
Объекты чистых путей предоставляют операции обработки путей, которые фактически не обращаются к файловой системе. Есть три способа доступа к этим классам, которые мы также называем вариантами:
-
class pathlib.PurePath(*pathsegments) -
Общий класс, представляющий вариант пути системы (создание экземпляра создаёт либо
PurePosixPath, либоPureWindowsPath):>>> PurePath('setup.py') # Running on a Unix machine PurePosixPath('setup.py')Каждый элемент pathsegments может быть либо строкой, представляющей сегмент пути, либо объектом, реализующим интерфейс
os.PathLike, возвращающим строку, либо другим объектом пути:>>> PurePath('foo', 'some/path', 'bar') PurePosixPath('foo/some/path/bar') >>> PurePath(Path('foo'), Path('bar')) PurePosixPath('foo/bar')Если pathsegments пуст, предполагается текущий каталог:
>>> PurePath() PurePosixPath('.')Если указано несколько абсолютных путей, последний используется как якорь (имитируя поведение
os.path.join()):>>> PurePath('/etc', '/usr', 'lib64') PurePosixPath('/usr/lib64') >>> PureWindowsPath('c:/Windows', 'd:bar') PureWindowsPath('d:bar')Однако в пути Windows изменение локального корня не отбрасывает предыдущее значение диска:
>>> PureWindowsPath('c:/Windows', '/Program Files') PureWindowsPath('c:/Program Files')Избыточные косые черты и одиночные точки складываются, но двойные точки (
'..') нет, поскольку это изменит значение пути при наличии символических ссылок:>>> PurePath('foo//bar') PurePosixPath('foo/bar') >>> PurePath('foo/./bar') PurePosixPath('foo/bar') >>> PurePath('foo/../bar') PurePosixPath('foo/../bar')(примитивный подход сделает
PurePosixPath('foo/../bar')эквивалентнымPurePosixPath('bar'), что неверно, еслиfoo— это символическая ссылка на другой каталог)Объекты чистых путей реализуют интерфейс
os.PathLike, что позволяет использовать их везде, где принимается этот интерфейс.Изменено в версии 3.6: Добавлена поддержка интерфейса
os.PathLike.
-
class pathlib.PurePosixPath(*pathsegments) -
Подкласс
PurePath, этот вариант пути представляет пути к файлам, не относящиеся к Windows:>>> PurePosixPath('/etc') PurePosixPath('/etc')pathsegments задаётся аналогично
PurePath.
-
class pathlib.PureWindowsPath(*pathsegments) -
Подкласс
PurePath, этот вариант пути представляет пути к файлам в Windows:>>> PureWindowsPath('c:/Program Files/') PureWindowsPath('c:/Program Files')pathsegments задаётся аналогично
PurePath.
Независимо от операционной системы, на которой вы работаете, вы можете создать экземпляры всех этих классов, поскольку они не предоставляют никаких операций, выполняющих системные вызовы.
Общие свойства
Пути неизменяемы и хешируемы. Пути одного и того же варианта сравнимы и упорядочиваемы. Эти свойства учитывают семантику преобразования регистра для данного варианта:
>>> PurePosixPath('foo') == PurePosixPath('FOO')
False
>>> PureWindowsPath('foo') == PureWindowsPath('FOO')
True
>>> PureWindowsPath('FOO') in { PureWindowsPath('foo') }
True
>>> PureWindowsPath('C:') < PureWindowsPath('d:')
True
Пути разных вариантов сравниваются как неравные и не могут быть упорядочены:
>>> PureWindowsPath('foo') == PurePosixPath('foo')
False
>>> PureWindowsPath('foo') < PurePosixPath('foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'PureWindowsPath' and 'PurePosixPath'
Операторы
Оператор слэша помогает создать дочерние пути, аналогично os.path.join():
>>> p = PurePath('/etc')
>>> p
PurePosixPath('/etc')
>>> p / 'init.d' / 'apache2'
PurePosixPath('/etc/init.d/apache2')
>>> q = PurePath('bin')
>>> '/usr' / q
PurePosixPath('/usr/bin')
Объект пути можно использовать везде, где принимается объект, реализующий os.PathLike:
>>> import os
>>> p = PurePath('/etc')
>>> os.fspath(p)
'/etc'
Строковое представление пути — это сам путь к файловой системе (в родном виде, например, с обратными слэшами в Windows), который можно передать любой функции, принимающей путь к файлу в виде строки:
>>> p = PurePath('/etc')
>>> str(p)
'/etc'
>>> p = PureWindowsPath('c:/Program Files')
>>> str(p)
'c:\\Program Files'
Аналогично, вызов bytes для пути возвращает сам путь к файловой системе как объект байтов, закодированный с помощью os.fsencode():
>>> bytes(p) b'/etc'
Примечание
Вызов bytes рекомендуется только под Unix. Под Windows формой unicode является каноническим представлением путей к файлам.
Доступ к отдельным частям
Для доступа к отдельным «частям» (компонентам) пути используйте следующее свойство:
-
PurePath.parts -
Кортеж, обеспечивающий доступ к различным компонентам пути:
>>> p = PurePath('/usr/bin/python3') >>> p.parts ('/', 'usr', 'bin', 'python3') >>> p = PureWindowsPath('c:/Program Files/PSF') >>> p.parts ('c:\\', 'Program Files', 'PSF')(обратите внимание, как диск и локальный корень сгруппированы в одной части)
Методы и свойства
Чистые пути предоставляют следующие методы и свойства:
-
PurePath.drive -
Строка, представляющая букву диска или имя, если оно есть:
>>> PureWindowsPath('c:/Program Files/').drive 'c:' >>> PureWindowsPath('/Program Files/').drive '' >>> PurePosixPath('/etc').drive ''Общедоступные сетевые ресурсы также считаются дисками:
>>> PureWindowsPath('//host/share/foo.txt').drive '\\\\host\\share'
-
PurePath.root -
Строка, представляющая корень (локальный или глобальный), если он есть:
>>> PureWindowsPath('c:/Program Files/').root '\\' >>> PureWindowsPath('c:Program Files/').root '' >>> PurePosixPath('/etc').root '/'Общедоступные сетевые ресурсы всегда имеют корень:
>>> PureWindowsPath('//host/share').root '\\'
-
PurePath.anchor -
Конкатенация диска и корня:
>>> PureWindowsPath('c:/Program Files/').anchor 'c:\\' >>> PureWindowsPath('c:Program Files/').anchor 'c:' >>> PurePosixPath('/etc').anchor '/' >>> PureWindowsPath('//host/share').anchor '\\\\host\\share\\'
-
PurePath.parents -
Неизменяемая последовательность, обеспечивающая доступ к логическим предкам пути:
>>> p = PureWindowsPath('c:/foo/bar/setup.py') >>> p.parents[0] PureWindowsPath('c:/foo/bar') >>> p.parents[1] PureWindowsPath('c:/foo') >>> p.parents[2] PureWindowsPath('c:/')
-
PurePath.parent -
Логический родитель пути:
>>> p = PurePosixPath('/a/b/c/d') >>> p.parent PurePosixPath('/a/b/c')Вы не можете перейти за якорь или пустой путь:
>>> p = PurePosixPath('/') >>> p.parent PurePosixPath('/') >>> p = PurePosixPath('.') >>> p.parent PurePosixPath('.')Примечание
Это чисто лексическая операция, поэтому следующее поведение:
>>> p = PurePosixPath('foo/..') >>> p.parent PurePosixPath('foo')Если вы хотите пройти вверх по произвольному пути в файловой системе, рекомендуется сначала вызвать
Path.resolve(), чтобы разрешить символические ссылки и устранить“..”компоненты.
-
PurePath.name -
Строка, представляющая конечный компонент пути, без диска и корня, если они есть:
>>> PurePosixPath('my/library/setup.py').name 'setup.py'Имена общедоступных сетевых ресурсов не учитываются:
>>> PureWindowsPath('//some/share/setup.py').name 'setup.py' >>> PureWindowsPath('//some/share').name ''
-
PurePath.suffix -
Расширение файла конечного компонента, если оно есть:
>>> PurePosixPath('my/library/setup.py').suffix '.py' >>> PurePosixPath('my/library.tar.gz').suffix '.gz' >>> PurePosixPath('my/library').suffix ''
-
PurePath.suffixes -
Список расширений файла пути:
>>> PurePosixPath('my/library.tar.gar').suffixes ['.tar', '.gar'] >>> PurePosixPath('my/library.tar.gz').suffixes ['.tar', '.gz'] >>> PurePosixPath('my/library').suffixes []
-
PurePath.stem -
Конечный компонент пути без расширения:
>>> PurePosixPath('my/library.tar.gz').stem 'library.tar' >>> PurePosixPath('my/library.tar').stem 'library' >>> PurePosixPath('my/library').stem 'library'
-
PurePath.as_posix() -
Возвращает строковое представление пути с прямыми слэшами (
/):>>> p = PureWindowsPath('c:\\windows') >>> str(p) 'c:\\windows' >>> p.as_posix() 'c:/windows'
-
PurePath.as_uri() -
Представляет путь в виде
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Как и в других методах, чувствительность к регистру соответствует системным настройкам:
>>> PurePosixPath('b.py').match('*.PY') False >>> PureWindowsPath('b.py').match('*.PY') True
-
PurePath.relative_to(*other) -
Вычислить версию этого пути, относительную к пути, представленному other. Если это невозможно, возбуждается исключение ValueError:
>>> p = PurePosixPath('/etc/passwd') >>> p.relative_to('/') PurePosixPath('etc/passwd') >>> p.relative_to('/etc') PurePosixPath('passwd') >>> p.relative_to('/usr') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "pathlib.py", line 694, in relative_to .format(str(self), str(formatted))) ValueError: '/etc/passwd' 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. Если у исходного пути нет суффикса, новый суффикс добавляется вместо него. Если суффикс пустая строка, исходный суффикс удаляется:>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz') >>> p.with_suffix('.bz2') PureWindowsPath('c:/Downloads/pathlib.tar.bz2') >>> p = PureWindowsPath('README') >>> p.with_suffix('.txt') PureWindowsPath('README.txt') >>> p = PureWindowsPath('README.txt') >>> p.with_suffix('') PureWindowsPath('README')
Конкретные пути
Конкретные пути являются подклассами чистых классов путей. Помимо операций, предоставляемых последними, они также предоставляют методы для выполнения системных вызовов над объектами путей. Существует три способа создания конкретных путей:
-
class pathlib.Path(*pathsegments) -
Подкласс
PurePath, этот класс представляет конкретные пути используемого в системе формата (создание объекта приводит к созданию либоPosixPath, либоWindowsPath):>>> Path('setup.py') PosixPath('setup.py')pathsegments задаётся аналогично
PurePath.
-
class pathlib.PosixPath(*pathsegments) -
Подкласс
PathиPurePosixPath, этот класс представляет конкретные пути файловой системы, не относящиеся к Windows:>>> PosixPath('/etc') PosixPath('/etc')pathsegments задаётся аналогично
PurePath.
-
class pathlib.WindowsPath(*pathsegments) -
Подкласс
PathиPureWindowsPath, этот класс представляет конкретные пути файловой системы Windows:>>> WindowsPath('c:/Program Files/') WindowsPath('c:/Program Files')pathsegments задаётся аналогично
PurePath.
Можно создавать только объекты того класса, который соответствует вашей системе (попытка выполнить системные вызовы на несовместимых типах путей может привести к ошибкам или сбою вашего приложения):
>>> import os
>>> os.name
'posix'
>>> Path('setup.py')
PosixPath('setup.py')
>>> PosixPath('setup.py')
PosixPath('setup.py')
>>> WindowsPath('setup.py')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pathlib.py", line 798, in __new__
% (cls.__name__,))
NotImplementedError: cannot instantiate 'WindowsPath' on your system
Методы
Конкретные пути предоставляют следующие методы в дополнение к методам чистых путей. Многие из этих методов могут возбуждать OSError, если системный вызов завершится неудачей (например, если путь не существует):
-
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_resultсодержащий информацию об этом пути, какos.stat(). Результат вычисляется каждый раз при вызове этого метода.>>> p = Path('setup.py') >>> p.stat().st_size 956 >>> p.stat().st_mtime 1327883547.852554
-
Path.chmod(mode) -
Изменить режим и разрешения файла, как
os.chmod():>>> p = Path('setup.py') >>> p.stat().st_mode 33277 >>> p.chmod(0o444) >>> p.stat().st_mode 33060
-
Path.exists() -
Существует ли файл или директория по этому пути:
>>> Path('.').exists() True >>> Path('setup.py').exists() True >>> Path('/etc').exists() True >>> Path('nonexistentfile').exists() FalseПримечание
Если путь указывает на символическую ссылку,
exists()возвращает, указывает ли символическая ссылка на существующий файл или директорию.
-
Path.expanduser() -
Возвращает новый путь с расширенными
~и~userконструкциями, как возвращаетos.path.expanduser():>>> p = PosixPath('~/films/Monty Python') >>> p.expanduser() PosixPath('/home/eric/films/Monty Python')Добавлена в версии 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, если gid файла не найдено в системной базе данных.
-
Path.is_dir() -
Возвращает
Trueесли путь указывает на директорию (или символическую ссылку, указывающую на директорию),Falseесли он указывает на другой тип файла.Также возвращается
False, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются вверх.
-
Path.is_file() -
Возвращает
Trueесли путь указывает на обычный файл (или символическую ссылку, указывающую на обычный файл),Falseесли он указывает на другой тип файла.Также возвращается
False, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются вверх.
-
Path.is_mount() -
Возвращает
Trueесли путь является точкой монтирования: точкой в файловой системе, где смонтирована другая файловая система. В POSIX функция проверяет, находится ли родительский каталог path,path/.., на другом устройстве, чем path, или указывают лиpath/..и path на один и тот же i-узел на одном и том же устройстве — это должно обнаруживать точки монтирования для всех вариантов Unix и POSIX. Не реализовано в Windows.Добавлена в версии 3.7.
-
Path.is_symlink() -
Возвращает
Trueесли путь указывает на символическую ссылку,Falseв противном случае.Также возвращается
False, если путь не существует; другие ошибки (например, ошибки доступа) передаются вверх.
-
Path.is_socket() -
Возвращает
Trueесли путь указывает на сокет Unix (или символическую ссылку, указывающую на сокет Unix),Falseесли он указывает на другой тип файла.Также возвращается
False, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются вверх.
-
Path.is_fifo() -
Возвращает
Trueесли путь указывает на FIFO (или символическую ссылку, указывающую на FIFO),Falseесли он указывает на другой тип файла.Также возвращается
False, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются вверх.
-
Path.is_block_device() -
Возвращает
True, если путь указывает на блочное устройство (или символическую ссылку, указывающую на блочное устройство),False, если он указывает на другой тип файла.Falseтакже возвращается, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки разрешения доступа) передаются.
-
Path.is_char_device() -
Возвращает
True, если путь указывает на символьное устройство (или символическую ссылку, указывающую на символьное устройство),False, если он указывает на другой тип файла.Falseтакже возвращается, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки разрешения доступа) передаются.
-
Path.iterdir() -
Когда путь указывает на каталог, возвращает объекты пути для содержимого каталога:
>>> p = Path('docs') >>> for child in p.iterdir(): child ... PosixPath('docs/conf.py') PosixPath('docs/_templates') PosixPath('docs/make.bat') PosixPath('docs/index.rst') PosixPath('docs/_build') PosixPath('docs/_static') PosixPath('docs/Makefile')
-
Path.lchmod(mode) -
Подобно
Path.chmod(), но если путь указывает на символическую ссылку, изменяется атрибут режима символической ссылки, а не ее целевого объекта.
-
Path.lstat() -
Подобно
Path.stat(), но если путь указывает на символическую ссылку, возвращает информацию о символической ссылке, а не ее целевого объекта.
-
Path.mkdir(mode=0o777, parents=False, exist_ok=False) -
Создает новый каталог по указанному пути. Если задан mode, он объединяется со значением
umaskпроцесса для определения режима файла и флагов доступа. Если путь уже существует, возникаетFileExistsError.Если parents равно true, все недостающие родительские каталоги создаются по мере необходимости; они создаются с правами по умолчанию без учета mode (имитируя команду POSIX
mkdir -p).Если parents равно false (по умолчанию), отсутствие родительского каталога вызывает
FileNotFoundError.Если exist_ok равно false (по умолчанию),
FileExistsErrorвозникает, если целевой каталог уже существует.Если exist_ok равно true, исключения
FileExistsErrorбудут игнорироваться (поведение такое же, как у команды 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 может быть строкой или другим объектом пути:
>>> 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(strict=False) -
Делает путь абсолютным, разрешая любые символические ссылки. Возвращает новый объект пути:
>>> p = Path() >>> p PosixPath('.') >>> p.resolve() PosixPath('/home/antoine/pathlib')Компоненты «
..» также удаляются (это единственный способ сделать это):>>> p = Path('docs/../setup.py') >>> p.resolve() PosixPath('/home/antoine/pathlib/setup.py')Если путь не существует, и strict равно
True, возникаетFileNotFoundError. Если strict равноFalse, путь разрешается насколько это возможно, а оставшаяся часть добавляется без проверки ее существования. Если во время разрешения пути обнаруживается бесконечная петля, возникаетRuntimeError.Новая в версии 3.6: Добавлен аргумент strict (поведение до 3.6 было строгим).
-
Path.rglob(pattern) -
Это эквивалентно вызову
Path.glob()с добавленным «**/» перед заданным относительным pattern:>>> sorted(Path().rglob("*.py")) [PosixPath('build/lib/pathlib.py'), PosixPath('docs/conf.py'), PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')]
-
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.
Соответствие инструментам в модуле os
Ниже приведена таблица, отображающая различные функции os и их соответствующие эквиваленты PurePath/Path.
Примечание
Хотя os.path.relpath() и PurePath.relative_to() имеют некоторые перекрывающиеся случаи использования, их семантика достаточно отличается, чтобы не считать их эквивалентными.
os и os.path | pathlib |
|---|---|
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.7/library/pathlib.html