pathlib
— Объектно-ориентированные пути к файловой системе¶
Добавлено в версии 3.4.
Исходный код: Lib/pathlib.py.
Этот модуль предлагает классы, представляющие пути файловой системы с семантикой, подходящей для различных операционных систем. Классы путей делятся на pure paths, которые обеспечивают чисто вычислительные операции без ввода/вывода, и concrete paths, которые наследуют от чистых путей, но также обеспечивают операции ввода/вывода.
Если вы никогда раньше не использовали этот модуль или просто не уверены, какой класс подходит для вашей задачи, то Path
, скорее всего, то, что вам нужно. Он инстанцирует concrete 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')
Ложные косые черты и одиночные точки сворачиваются, но двойные точки (
'..'
) и ведущие двойные косые черты ('//'
) - нет, поскольку это может изменить значение пути по различным причинам (например, символические ссылки, UNC-пути):>>> PurePath('foo//bar') PurePosixPath('foo/bar') >>> 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, включая UNC paths:>>> PureWindowsPath('c:/Program Files/') PureWindowsPath('c:/Program Files') >>> PureWindowsPath('//server/share/file') PureWindowsPath('//server/share/file')
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')
Объект path может использоваться везде, где принимается объект, реализующий 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 форма юникода является каноническим представлением путей к файловой системе.
Доступ к отдельным частям¶
Чтобы получить доступ к отдельным «частям» (компонентам) пути, используйте следующее свойство:
-
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 ''
Общие ресурсы 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 '\\'
Если путь начинается более чем с двух последовательных косых черт,
PurePosixPath
сворачивает их:>>> PurePosixPath('//etc').root '//' >>> PurePosixPath('///etc').root '/' >>> PurePosixPath('////etc').root '/'
Примечание
Такое поведение соответствует The Open Group Base Specifications Issue 6, параграф 4.11 Pathname Resolution:
*»Имя пути, начинающееся с двух последовательных косых черт, может интерпретироваться в зависимости от реализации, хотя более двух ведущих косых черт должно рассматриваться как одна косая черта».
-
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:/')
Изменено в версии 3.10: Последовательность родителей теперь поддерживает slices и отрицательные значения индекса.
-
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
()¶ Представьте путь в виде URI
file
. Если путь не является абсолютным, то возникает ошибка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_relative_to
(*other)¶ Возвращает, является ли этот путь относительным по отношению к другому пути.
>>> p = PurePath('/etc/passwd') >>> p.is_relative_to('/etc') True >>> p.is_relative_to('/usr') False
Добавлено в версии 3.9.
-
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)¶ Вычислить версию этого пути относительно пути, представленного другим. Если это невозможно, выдается 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' is not in the subpath of '/usr' OR one path is relative and the other absolute.
ПРИМЕЧАНИЕ: Эта функция является частью
PurePath
и работает со строками. Она не проверяет и не обращается к базовой структуре файла.
-
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_stem
(stem)¶ Возвращает новый путь с измененным именем
stem
. Если исходный путь не имеет имени, будет выдана ошибка ValueError:>>> p = PureWindowsPath('c:/Downloads/draft.txt') >>> p.with_stem('final') PureWindowsPath('c:/Downloads/final.txt') >>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz') >>> p.with_stem('lib') PureWindowsPath('c:/Downloads/lib.gz') >>> p = PureWindowsPath('c:/') >>> p.with_stem('') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/antoine/cpython/default/Lib/pathlib.py", line 861, in with_stem return self.with_name(stem + self.suffix) File "/home/antoine/cpython/default/Lib/pathlib.py", line 851, in with_name raise ValueError("%r has an empty name" % (self,)) ValueError: PureWindowsPath('c:/') has an empty name
Добавлено в версии 3.9.
-
PurePath.
with_suffix
(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') >>> 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
, если системный вызов не удался (например, потому что путь не существует).
Изменено в версии 3.8: exists()
, is_dir()
, is_file()
, is_mount()
, is_symlink()
, is_block_device()
, is_char_device()
, is_fifo()
, is_socket()
теперь возвращают False
вместо того, чтобы вызывать исключение для путей, содержащих символы, непредставимые на уровне ОС.
-
classmethod
Path.
cwd
()¶ Возвращает новый объект path, представляющий текущий каталог (как возвращено командой
os.getcwd()
):>>> Path.cwd() PosixPath('/home/antoine/pathlib')
-
classmethod
Path.
home
()¶ Возвращает новый объект path, представляющий домашний каталог пользователя (как возвращено конструкцией
os.path.expanduser()
с~
). Если домашний каталог не может быть определен, выдается сообщениеRuntimeError
.>>> Path.home() PosixPath('/home/antoine')
Добавлено в версии 3.5.
-
Path.
stat
(*, follow_symlinks=True)¶ Возвращает объект
os.stat_result
, содержащий информацию о данном пути, какos.stat()
. Результат просматривается при каждом вызове этого метода.Этот метод обычно следует за симлинками; для статирования симлинка добавьте аргумент
follow_symlinks=False
, или используйтеlstat()
.>>> p = Path('setup.py') >>> p.stat().st_size 956 >>> p.stat().st_mtime 1327883547.852554
Изменено в версии 3.10: Добавлен параметр follow_symlinks.
-
Path.
chmod
(mode, *, follow_symlinks=True)¶ Измените режим файла и разрешения, например
os.chmod()
.Этот метод обычно применяется к симлинкам. Некоторые версии Unix поддерживают изменение разрешений на самой симлинке; на этих платформах вы можете добавить аргумент
follow_symlinks=False
или использоватьlchmod()
.>>> p = Path('setup.py') >>> p.stat().st_mode 33277 >>> p.chmod(0o444) >>> p.stat().st_mode 33060
Изменено в версии 3.10: Добавлен параметр follow_symlinks.
-
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()
. Если домашний каталог не может быть разрешен, выдается сообщениеRuntimeError
.>>> p = PosixPath('~/films/Monty Python') >>> p.expanduser() PosixPath('/home/eric/films/Monty Python')
Добавлено в версии 3.5.
-
Path.
glob
(pattern)¶ Глобус заданного относительного шаблона в каталоге, представленном данным путем, выдавая все совпадающие файлы (любого типа):
>>> sorted(Path('.').glob('*.py')) [PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')] >>> sorted(Path('.').glob('*/*.py')) [PosixPath('docs/conf.py')]
Шаблоны такие же, как и для
fnmatch
, с добавлением «**
», что означает «этот каталог и все подкаталоги, рекурсивно». Другими словами, это позволяет использовать рекурсивное глоббинг:>>> sorted(Path('.').glob('**/*.py')) [PosixPath('build/lib/pathlib.py'), PosixPath('docs/conf.py'), PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')]
Примечание
Использование шаблона «
**
» в больших деревьях каталогов может занимать непомерно много времени.Вызывает auditing event
pathlib.Path.glob
с аргументамиself
,pattern
.
-
Path.
group
()¶ Возвращает имя группы, владеющей файлом. Если gid файла не найден в системной базе данных, выдается сообщение
KeyError
.
-
Path.
is_dir
()¶ Возвращает
True
, если путь указывает на каталог (или символическую ссылку, указывающую на каталог),False
, если он указывает на файл другого типа.False
также возвращается, если путь не существует или является битым симлинком; другие ошибки (например, ошибки разрешения) распространяются.
-
Path.
is_file
()¶ Возвращает
True
, если путь указывает на обычный файл (или символическую ссылку, указывающую на обычный файл),False
, если он указывает на файл другого типа.False
также возвращается, если путь не существует или является битым симлинком; другие ошибки (например, ошибки разрешения) распространяются.
-
Path.
is_mount
()¶ Возвращает
True
, если путь является mount point: точкой в файловой системе, где была смонтирована другая файловая система. На 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
()¶ Возвращает имя пользователя, владеющего файлом. Если uid файла не найден в системной базе данных, выдается сообщение
KeyError
.
-
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.
readlink
()¶ Возвращает путь, на который указывает символическая ссылка (как возвращается
os.readlink()
):>>> p = Path('mylink') >>> p.symlink_to('setup.py') >>> p.readlink() PosixPath('setup.py')
Добавлено в версии 3.9.
-
Path.
rename
(target)¶ Переименовать данный файл или каталог в заданный target и вернуть новый экземпляр Path, указывающий на target. В Unix, если target существует и является файлом, он будет заменен беззвучно, если у пользователя есть разрешение. В Windows, если target существует, будет выдано сообщение
FileExistsError
. target может быть либо строкой, либо другим объектом пути:>>> p = Path('foo') >>> p.open('w').write('some text') 9 >>> target = Path('bar') >>> p.rename(target) PosixPath('bar') >>> target.open().read() 'some text'
Целевой путь может быть абсолютным или относительным. Относительные пути интерпретируются относительно текущего рабочего каталога, не каталога объекта Path.
Изменено в версии 3.8: Добавлено возвращаемое значение, возвращает новый экземпляр Path.
-
Path.
replace
(target)¶ Переименовать данный файл или каталог в заданный target и вернуть новый экземпляр Path, указывающий на target. Если target указывает на существующий файл или пустой каталог, он будет безусловно заменен.
Целевой путь может быть абсолютным или относительным. Относительные пути интерпретируются относительно текущего рабочего каталога, не каталога объекта Path.
Изменено в версии 3.8: Добавлено возвращаемое значение, возвращает новый экземпляр Path.
-
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()
с добавлением «**/
» перед заданным относительным шаблоном:>>> sorted(Path().rglob("*.py")) [PosixPath('build/lib/pathlib.py'), PosixPath('docs/conf.py'), PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')]
Вызывает auditing event
pathlib.Path.rglob
с аргументамиself
,pattern
.
-
Path.
rmdir
()¶ Удалите этот каталог. Каталог должен быть пустым.
-
Path.
samefile
(other_path)¶ Возвращает, указывает ли данный путь на тот же файл, что и 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)¶ Сделать этот путь символической ссылкой на цель. В 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.
hardlink_to
(target)¶ Сделайте этот путь жесткой ссылкой на тот же файл, что и target.
Примечание
Порядок аргументов (ссылка, цель) обратный порядку аргументов
os.link()
.Добавлено в версии 3.10.
-
Path.
link_to
(target)¶ Сделайте target жесткой ссылкой на этот путь.
Предупреждение
Эта функция не делает данный путь жесткой ссылкой на цель, несмотря на подтекст имени функции и аргумента. Порядок аргументов (цель, ссылка) обратен порядку аргументов
Path.symlink_to()
иPath.hardlink_to()
, но соответствует порядку аргументовos.link()
.Добавлено в версии 3.8.
Не рекомендуется, начиная с версии 3.10: Этот метод устарел в пользу
Path.hardlink_to()
, так как порядок аргументовPath.link_to()
не соответствует порядку аргументовPath.symlink_to()
.
-
Path.
touch
(mode=0o666, exist_ok=True)¶ Создать файл по заданному пути. Если задан mode, то он комбинируется со значением
umask
процесса для определения режима файла и флагов доступа. Если файл уже существует, функция успешна, если exist_ok истинно (и время его модификации обновляется до текущего времени), иначе выдается сообщениеFileExistsError
.
-
Path.
unlink
(missing_ok=False)¶ Удалить этот файл или символическую ссылку. Если путь указывает на каталог, используйте
Path.rmdir()
вместо этого.Если missing_ok равно false (по умолчанию), то при несуществовании пути выдается сообщение
FileNotFoundError
.Если missing_ok равно true, исключения
FileNotFoundError
будут игнорироваться (такое же поведение, как у команды POSIXrm -f
).Изменено в версии 3.8: Был добавлен параметр missing_ok.
-
Path.
write_bytes
(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, newline=None)¶ Открыть указанный файл в текстовом режиме, записать в него данные и закрыть файл:
>>> p = Path('my_text_file') >>> p.write_text('Text file contents') 18 >>> p.read_text() 'Text file contents'
Существующий файл с таким же именем перезаписывается. Необязательные параметры имеют то же значение, что и в
open()
.Добавлено в версии 3.5.
Изменено в версии 3.10: Был добавлен параметр newline.
Соответствие инструментам в модуле os
¶
Ниже приведена таблица, отображающая различные функции os
на их соответствующие эквиваленты PurePath
/Path
.
Примечание
Не все приведенные ниже пары функций/методов эквивалентны. Некоторые из них, несмотря на совпадающие случаи использования, имеют разную семантику. К ним относятся os.path.abspath()
и Path.resolve()
, os.path.relpath()
и PurePath.relative_to()
.
Сноски
- 1
os.path.abspath()
не разрешает символические ссылки, в то время какPath.resolve()
разрешает.- 2
PurePath.relative_to()
требует, чтобыself
был подпунктом аргумента, аos.path.relpath()
- нет.