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 диск не сбрасывается, когда встречается сегмент относительного пути с корнем (например,
r'\foo')>>> 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-пути:>>> 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(). Если аргумент — абсолютный путь, предыдущий путь игнорируется. В Windows диск не сбрасывается, когда аргумент — относительный путь с корнем (например, r'\foo'):
>>> p = PurePath('/etc')
>>> p
PurePosixPath('/etc')
>>> p / 'init.d' / 'apache2'
PurePosixPath('/etc/init.d/apache2')
>>> q = PurePath('bin')
>>> '/usr' / q
PurePosixPath('/usr/bin')
>>> p / '/an_absolute_path'
PurePosixPath('/an_absolute_path')
>>> PureWindowsPath('c:/Windows', '/Program Files')
PureWindowsPath('c:/Program Files')
Объект пути можно использовать везде, где ожидается объект, реализующий 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 Разрешение пути:
«Путь, начинающийся с двух последовательных слешей, может интерпретироваться реализацией произвольным образом, хотя более двух ведущих слешей обрабатываются как один слэш.»
-
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: Последовательность родителей теперь поддерживает слайсы и значения отрицательных индексов.
-
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_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. Если у исходного пути нет расширения, новое расширение добавляется вместо него. Если расширение является пустой строкой, исходное расширение удаляется:>>> 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() -
Возвращает новый объект пути, представляющий текущую директорию (как возвращается функцией
os.getcwd()):>>> Path.cwd() PosixPath('/home/antoine/pathlib')
-
classmethod Path.home() -
Возвращает новый объект пути, представляющий домашнюю директорию пользователя (как возвращается функцией
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) -
Выполняет поиск по шаблону 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')]Примечание
Использование шаблона “
**” в больших древовидных структурах директорий может потребовать значительного времени.Вызывает событие аудита
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если путь является точкой монтирования: точкой в файловой системе, где смонтирована другая файловая система. В POSIX функция проверяет, находится ли родитель path,path/.., на другом устройстве, чем path, или указывают лиpath/..и path на один и тот же индекс на том же устройстве — это должно обнаруживать точки монтирования для всех вариантов 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.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 может быть строкой или другим объектом path:>>> p = Path('foo') >>> p.open('w').write('some text') 9 >>> target = Path('bar') >>> p.rename(target) PosixPath('bar') >>> target.open().read() 'some text'Путь назначения может быть абсолютным или относительным. Относительные пути интерпретируются относительно текущей рабочей директории, а не директории объекта Path.
Реализовано с помощью
os.rename()и обеспечивает те же гарантии.Изменено в версии 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()с добавленным «**/» перед заданным относительным pattern:>>> 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) -
Возвращает значение 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.hardlink_to(target) -
Создать жёсткую ссылку на этот путь к тому же файлу, что и target.
Примечание
Порядок аргументов (ссылка, целевой объект) обратный порядку в
os.link().Добавлена в версии 3.10.
-
Path.link_to(target) -
Создать жёсткую ссылку на 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 равно true (и время его изменения обновляется до текущего времени), в противном случае возникаетFileExistsError.
-
Path.unlink(missing_ok=False) -
Удалить этот файл или символическую ссылку. Если путь указывает на каталог, используйте
Path.rmdir()вместо этого.Если missing_ok ложно (по умолчанию),
FileNotFoundErrorгенерируется, если путь не существует.Если missing_ok истинно, исключения
FileNotFoundErrorбудут проигнорированы (то же поведение, что и у POSIX командыrm -f).Изменено в версии 3.8: Параметр missing_ok был добавлен.
-
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, newline=None) -
Открыть файл, на который указывает путь, в текстовом режиме, записать в него data и закрыть файл:
>>> 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()— нет.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/library/pathlib.html