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_relative_to(*other) -
Возвращает, является ли данный путь относительным к пути 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) -
Вызов этого метода эквивалентен объединению пути с каждым из аргументов 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' 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() -
Возвращает новый объект пути, представляющий текущую директорию (как возвращает
os.getcwd()):>>> Path.cwd() PosixPath('/home/antoine/pathlib')
-
classmethod Path.home() -
Возвращает новый объект пути, представляющий домашнюю директорию пользователя (как возвращает
os.path.expanduser()с~конструкцией):>>> Path.home() PosixPath('/home/antoine')Обратите внимание, что в отличие от
os.path.expanduser(), в системах POSIX будет возбуждатьсяKeyErrorилиRuntimeError, а в системах Windows —RuntimeError, если домашняя директория не может быть разрешена.Введено в версии 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')Обратите внимание, что в отличие от
os.path.expanduser(), в системах POSIX будет возбуждатьсяKeyErrorилиRuntimeError, а в системах Windows —RuntimeError, если домашняя директория не может быть разрешена.Введено в версии 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')]Шаблон «
**» означает «эта директория и все поддиректории, рекурсивно». Другими словами, он позволяет рекурсивный глобальный поиск:>>> 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() -
Возвращает имя группы, владеющей файлом.
KeyErrorвозбуждается, если gid файла не найден в базе данных системы.
-
Path.is_dir() -
Возвращает
True, если путь указывает на директорию (или символическую ссылку, указывающую на директорию),False, если он указывает на другой тип файла.Falseтакже возвращается, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются дальше.
-
Path.is_file() -
Возвращает
True, если путь указывает на обычный файл (или символическую ссылку, указывающую на обычный файл),False, если он указывает на другой тип файла.Falseтакже возвращается, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются дальше.
-
Path.is_mount() -
Возвращает
True, если путь является точкой монтирования: точкой в файловой системе, где смонтирована другая файловая система. В POSIX функция проверяет, находится ли родитель path,path/.., на другом устройстве, чем path, или указывают лиpath/..и path на тот же inode на том же устройстве — это должно обнаруживать точки монтирования для всех вариантов 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.
-
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 существует и является файлом, он будет заменён без предупреждения, если у пользователя есть права. 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.
Изменено в версии 3.8: Добавлен возвращаемый объект, возвращается новый объект Path.
-
Path.replace(target) -
Переименовать этот файл или каталог в указанное target и вернуть новый объект Path, указывающий на target. Если target указывает на существующий файл или пустую директорию, он будет безусловно заменён.
Путь к целевому объекту может быть абсолютным или относительным. Относительные пути интерпретируются относительно текущей рабочей директории, а не директории объекта Path.
Изменено в версии 3.8: Добавлен возвращаемый объект, возвращается новый объект Path.
-
Path.resolve(strict=False) -
Сделать путь абсолютным, разрешив все символические ссылки. Возвращается новый объект path:
>>> 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')]Вызывает событие аудита аудита
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) -
Создать этот путь как символическую ссылку на 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.link_to(target) -
Создать жёсткую ссылку target на этот путь.
Предупреждение
Эта функция не создаёт жёсткую ссылку target на этот путь, несмотря на указание в имени функции и аргументов. Порядок аргументов (целевой объект, ссылка) обратный
Path.symlink_to(), но соответствуетos.link().Введено в версии 3.8.
-
Path.touch(mode=0o666, exist_ok=True) -
Создать файл по данному пути. Если задан параметр mode, он объединяется со значением
umaskпроцесса, чтобы определить режим файла и флаги доступа. Если файл уже существует, функция завершается успешно, если exist_ok имеет значение True (и время его изменения обновляется до текущего времени), в противном случае возникает исключение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) -
Открыть файл в режиме 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) -
Открыть файл в текстовом режиме, записать в него data и закрыть файл:
>>> p = Path('my_text_file') >>> p.write_text('Text file contents') 18 >>> p.read_text() 'Text file contents'Существующий файл с таким же именем будет перезаписан. Дополнительные параметры имеют такое же значение, как и в
open().Введено в версии 3.5.
Соответствие инструментам в модуле os
Ниже приведена таблица, сопоставляющая различные функции os с их соответствующими эквивалентами PurePath/Path.
Примечание
Хотя os.path.relpath() и PurePath.relative_to() имеют некоторые перекрывающиеся случаи использования, их семантика достаточно отличается, чтобы не считать их эквивалентными.
os и os.path | pathlib |
|---|---|
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/library/pathlib.html