Spec-Zone.ru › Python 3.6

pathlib — Объектно-ориентированные пути к файлам системы

Новое в версии 3.4.

Исходный код: Lib/pathlib.py

Этот модуль предлагает классы, представляющие пути к файлам системы с семантикой, подходящей для разных операционных систем. Классы путей делятся на чистые пути, которые обеспечивают чисто вычислительные операции без ввода-вывода, и конкретные пути, которые наследуются от чистых путей, но также обеспечивают операции ввода-вывода.

../_images/pathlib-inheritance.png

Если вы никогда раньше не использовали этот модуль или просто не уверены, какой класс подходит для вашей задачи, Path — это, скорее всего, то, что вам нужно. Он создаёт конкретный путь для платформы, на которой выполняется код.

Чистые пути полезны в некоторых особых случаях; например:

  1. Если вы хотите манипулировать путями Windows на Unix-машине (или наоборот). Вы не можете создать WindowsPath при работе на Unix, но вы можете создать PureWindowsPath.
  2. Вы хотите убедиться, что ваш код манипулирует путями, не обращаясь к ОС. В этом случае создание одного из чистых классов может быть полезно, поскольку они просто не имеют операций доступа к ОС.

См. также

PEP 428: Модуль pathlib — объектно-ориентированные пути к файлам системы.

См. также

Для низкоуровневой манипуляции путями в строках вы также можете использовать модуль os.path.

11.1.1. Базовое использование

Импорт основного класса:

>>> from pathlib import Path

Вывод подкаталогов:

>>> p = Path('.')
>>> [x for x in p.iterdir() if x.is_dir()]
[PosixPath('.hg'), PosixPath('docs'), PosixPath('dist'),
 PosixPath('__pycache__'), PosixPath('build')]

Вывод файлов Python в этом дереве каталогов:

>>> list(p.glob('**/*.py'))
[PosixPath('test_pathlib.py'), PosixPath('setup.py'),
 PosixPath('pathlib.py'), PosixPath('docs/conf.py'),
 PosixPath('build/lib/pathlib.py')]

Навигация внутри дерева каталогов:

>>> p = Path('/etc')
>>> q = p / 'init.d' / 'reboot'
>>> q
PosixPath('/etc/init.d/reboot')
>>> q.resolve()
PosixPath('/etc/rc.d/init.d/halt')

Запрос свойств пути:

>>> q.exists()
True
>>> q.is_dir()
False

Открытие файла:

>>> with q.open() as f: f.readline()
...
'#!/bin/bash\n'

11.1.2. Чистые пути

Объекты чистых путей предоставляют операции обработки путей, которые фактически не обращаются к файловой системе. Есть три способа доступа к этим классам, которые мы также называем вариантами:

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.

Независимо от операционной системы, на которой вы работаете, вы можете создать все эти классы, так как они не предоставляют операций, которые выполняют системные вызовы.

11.1.2.1. Общие свойства

Пути неизменяемы и хешируемы. Пути одного и того же типа сравнимы и упорядочиваемы. Эти свойства учитывают семантику изменения регистра типов.

>>> PurePosixPath('foo') == PurePosixPath('FOO')
False
>>> PureWindowsPath('foo') == PureWindowsPath('FOO')
True
>>> PureWindowsPath('FOO') in { PureWindowsPath('foo') }
True
>>> PureWindowsPath('C:') < PureWindowsPath('d:')
True

Пути разных типов сравниваются как неравные и не могут быть упорядочены:

>>> PureWindowsPath('foo') == PurePosixPath('foo')
False
>>> PureWindowsPath('foo') < PurePosixPath('foo')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'PureWindowsPath' and 'PurePosixPath'

11.1.2.2. Операторы

Оператор слэша помогает создавать дочерние пути, аналогично os.path.join():

>>> p = PurePath('/etc')
>>> p
PurePosixPath('/etc')
>>> p / 'init.d' / 'apache2'
PurePosixPath('/etc/init.d/apache2')
>>> q = PurePath('bin')
>>> '/usr' / q
PurePosixPath('/usr/bin')

Объект пути можно использовать там, где принимается объект, реализующий 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 формой с юникодом является каноническое представление путей к файлам.

11.1.2.3. Доступ к отдельным частям

Для доступа к отдельным «частям» (компонентам) пути используйте следующее свойство:

PurePath.parts

Кортеж, позволяющий получить доступ к различным компонентам пути:

>>> p = PurePath('/usr/bin/python3')
>>> p.parts
('/', 'usr', 'bin', 'python3')

>>> p = PureWindowsPath('c:/Program Files/PSF')
>>> p.parts
('c:\\', 'Program Files', 'PSF')

(обратите внимание, как диск и локальный корень объединены в одной части)

11.1.2.4. Методы и свойства

PurePath.drive

Строка, представляющая букву диска или имя, если таковые имеются:

>>> PureWindowsPath('c:/Program Files/').drive
'c:'
>>> PureWindowsPath('/Program Files/').drive
''
>>> PurePosixPath('/etc').drive
''

Обменные ресурсы UNC также считаются дисками:

>>> PureWindowsPath('//host/share/foo.txt').drive
'\\\\host\\share'
PurePath.root

Строка, представляющая корень (локальный или глобальный), если таковой имеется:

>>> PureWindowsPath('c:/Program Files/').root
'\\'
>>> PureWindowsPath('c:Program Files/').root
''
>>> PurePosixPath('/etc').root
'/'

Обменные ресурсы UNC всегда имеют корень:

>>> PureWindowsPath('//host/share').root
'\\'
PurePath.anchor

Объединение диска и корня:

>>> PureWindowsPath('c:/Program Files/').anchor
'c:\\'
>>> PureWindowsPath('c:Program Files/').anchor
'c:'
>>> PurePosixPath('/etc').anchor
'/'
>>> PureWindowsPath('//host/share').anchor
'\\\\host\\share\\'
PurePath.parents

Неизменяемая последовательность, предоставляющая доступ к логическим предкам пути:

>>> p = PureWindowsPath('c:/foo/bar/setup.py')
>>> p.parents[0]
PureWindowsPath('c:/foo/bar')
>>> p.parents[1]
PureWindowsPath('c:/foo')
>>> p.parents[2]
PureWindowsPath('c:/')
PurePath.parent

Логический родитель пути:

>>> p = PurePosixPath('/a/b/c/d')
>>> p.parent
PurePosixPath('/a/b/c')

Вы не можете перейти за пределы якоря или пустого пути:

>>> p = PurePosixPath('/')
>>> p.parent
PurePosixPath('/')
>>> p = PurePosixPath('.')
>>> p.parent
PurePosixPath('.')

Примечание

Это чисто лексическая операция, поэтому следующее поведение:

>>> p = PurePosixPath('foo/..')
>>> p.parent
PurePosixPath('foo')

Если вы хотите пройти по произвольному пути файловой системы вверх, рекомендуется сначала вызвать Path.resolve(), чтобы разрешить символические ссылки и исключить “..” компоненты.

PurePath.name

Строка, представляющая конечный компонент пути, без диска и корня, если таковые имеются:

>>> PurePosixPath('my/library/setup.py').name
'setup.py'

Имена дисков UNC не рассматриваются:

>>> PureWindowsPath('//some/share/setup.py').name
'setup.py'
>>> PureWindowsPath('//some/share').name
''
PurePath.suffix

Расширение файла конечного компонента, если таковое имеется:

>>> PurePosixPath('my/library/setup.py').suffix
'.py'
>>> PurePosixPath('my/library.tar.gz').suffix
'.gz'
>>> PurePosixPath('my/library').suffix
''
PurePath.suffixes

Список расширений файлов пути:

>>> PurePosixPath('my/library.tar.gar').suffixes
['.tar', '.gar']
>>> PurePosixPath('my/library.tar.gz').suffixes
['.tar', '.gz']
>>> PurePosixPath('my/library').suffixes
[]
PurePath.stem

Конечный компонент пути без расширения:

>>> PurePosixPath('my/library.tar.gz').stem
'library.tar'
>>> PurePosixPath('my/library.tar').stem
'library'
>>> PurePosixPath('my/library').stem
'library'
PurePath.as_posix()

Возвращает строковое представление пути с прямыми слэшами (/):

>>> p = PureWindowsPath('c:\\windows')
>>> str(p)
'c:\\windows'
>>> p.as_posix()
'c:/windows'
PurePath.as_uri()

Представляет путь в виде file URI. ValueError генерируется, если путь не абсолютный.

>>> p = PurePosixPath('/etc/passwd')
>>> p.as_uri()
'file:///etc/passwd'
>>> p = PureWindowsPath('c:/Windows')
>>> p.as_uri()
'file:///c:/Windows'
PurePath.is_absolute()

Возвращает, является ли путь абсолютным или нет. Путь считается абсолютным, если он содержит корень и (если это разрешено) диск:

>>> PurePosixPath('/a/b').is_absolute()
True
>>> PurePosixPath('a/b').is_absolute()
False

>>> PureWindowsPath('c:/a/b').is_absolute()
True
>>> PureWindowsPath('/a/b').is_absolute()
False
>>> PureWindowsPath('c:').is_absolute()
False
>>> PureWindowsPath('//some/share').is_absolute()
True
PurePath.is_reserved()

С PureWindowsPath, возвращает True , если путь считается зарезервированным в Windows, False в противном случае. С PurePosixPath, False всегда возвращается.

>>> PureWindowsPath('nul').is_reserved()
True
>>> PurePosixPath('nul').is_reserved()
False

Системные вызовы для зарезервированных путей могут загадочно завершаться ошибкой или иметь непреднамеренные последствия.

PurePath.joinpath(*other)

Вызов этого метода эквивалентен объединению пути с каждым из других аргументов по очереди:

>>> PurePosixPath('/etc').joinpath('passwd')
PurePosixPath('/etc/passwd')
>>> PurePosixPath('/etc').joinpath(PurePosixPath('passwd'))
PurePosixPath('/etc/passwd')
>>> PurePosixPath('/etc').joinpath('init.d', 'apache2')
PurePosixPath('/etc/init.d/apache2')
>>> PureWindowsPath('c:').joinpath('/Program Files')
PureWindowsPath('c:/Program Files')
PurePath.match(pattern)

Сопоставляет этот путь с предоставленным шаблоном в стиле glob. Возвращает True , если сопоставление успешно, False в противном случае.

Если шаблон относительный, путь может быть относительным или абсолютным, и сопоставление выполняется справа налево:

>>> PurePath('a/b.py').match('*.py')
True
>>> PurePath('/a/b/c.py').match('b/*.py')
True
>>> PurePath('/a/b/c.py').match('a/*.py')
False

Если шаблон абсолютный, путь также должен быть абсолютным, и весь путь должен совпадать:

>>> PurePath('/a.py').match('/*.py')
True
>>> PurePath('a/b.py').match('/*.py')
False

Как и в других методах, учитывается регистрозависимость:

>>> PureWindowsPath('b.py').match('*.PY')
True
PurePath.relative_to(*other)

Вычисляет версию этого пути относительно пути, представленного другим объектом. Если это невозможно, возбуждается исключение ValueError:

>>> p = PurePosixPath('/etc/passwd')
>>> p.relative_to('/')
PurePosixPath('etc/passwd')
>>> p.relative_to('/etc')
PurePosixPath('passwd')
>>> p.relative_to('/usr')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pathlib.py", line 694, in relative_to
    .format(str(self), str(formatted)))
ValueError: '/etc/passwd' does not start with '/usr'
PurePath.with_name(name)

Возвращает новый путь с изменённым именем name. Если у исходного пути нет имени, возбуждается исключение ValueError:

>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')
>>> p.with_name('setup.py')
PureWindowsPath('c:/Downloads/setup.py')
>>> p = PureWindowsPath('c:/')
>>> p.with_name('setup.py')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/antoine/cpython/default/Lib/pathlib.py", line 751, in with_name
    raise ValueError("%r has an empty name" % (self,))
ValueError: PureWindowsPath('c:/') has an empty name
PurePath.with_suffix(suffix)

Возвращает новый путь с изменённым расширением suffix. Если у исходного пути нет расширения, новое расширение добавляется вместо него. Если расширение пустая строка, исходное расширение удаляется:

>>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')
>>> p.with_suffix('.bz2')
PureWindowsPath('c:/Downloads/pathlib.tar.bz2')
>>> p = PureWindowsPath('README')
>>> p.with_suffix('.txt')
PureWindowsPath('README.txt')
>>> p = PureWindowsPath('README.txt')
>>> p.with_suffix('')
PureWindowsPath('README')

11.1.3. Конкретные пути

Конкретные пути являются подклассами чистых путей. Кроме операций, предоставляемых последними, они также предоставляют методы для выполнения системных вызовов над объектами пути. Есть три способа создания конкретных путей:

class pathlib.Path(*pathsegments)

Подкласс PurePath, этот класс представляет собой конкретные пути на основе формата системы (создание экземпляра создаёт либо PosixPath, либо WindowsPath):

>>> Path('setup.py')
PosixPath('setup.py')

pathsegments задаются аналогично PurePath.

class pathlib.PosixPath(*pathsegments)

Подкласс Path и PurePosixPath, этот класс представляет собой конкретные пути файловой системы, не являющиеся Windows:

>>> PosixPath('/etc')
PosixPath('/etc')

pathsegments задаются аналогично PurePath.

class pathlib.WindowsPath(*pathsegments)

Подкласс Path и PureWindowsPath, этот класс представляет собой конкретные пути файловой системы Windows:

>>> WindowsPath('c:/Program Files/')
WindowsPath('c:/Program Files')

pathsegments задаются аналогично PurePath.

Вы можете создавать только экземпляры классов, соответствующих вашей системе (разрешение системных вызовов для несовместимых вариантов путей может привести к ошибкам или сбоям в вашем приложении):

>>> import os
>>> os.name
'posix'
>>> Path('setup.py')
PosixPath('setup.py')
>>> PosixPath('setup.py')
PosixPath('setup.py')
>>> WindowsPath('setup.py')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pathlib.py", line 798, in __new__
    % (cls.__name__,))
NotImplementedError: cannot instantiate 'WindowsPath' on your system

11.1.3.1. Методы

Конкретные пути предоставляют следующие методы помимо методов чистых путей. Многие из этих методов могут генерировать исключение OSError, если системный вызов завершается ошибкой (например, потому что путь не существует):

classmethod Path.cwd()

Возвращает новый объект пути, представляющий текущую директорию (как возвращает os.getcwd()):

>>> Path.cwd()
PosixPath('/home/antoine/pathlib')
classmethod Path.home()

Возвращает новый объект пути, представляющий домашнюю директорию пользователя (как возвращает os.path.expanduser() с ~ конструкцией):

>>> Path.home()
PosixPath('/home/antoine')

Добавлено в версии 3.5.

Path.stat()

Возвращает информацию об этом пути (аналогично os.stat()). Результат ищется при каждом вызове этого метода.

>>> p = Path('setup.py')
>>> p.stat().st_size
956
>>> p.stat().st_mtime
1327883547.852554
Path.chmod(mode)

Изменяет режим и разрешения файла, как os.chmod():

>>> p = Path('setup.py')
>>> p.stat().st_mode
33277
>>> p.chmod(0o444)
>>> p.stat().st_mode
33060
Path.exists()

Указывает, ссылается ли путь на существующий файл или директорию:

>>> Path('.').exists()
True
>>> Path('setup.py').exists()
True
>>> Path('/etc').exists()
True
>>> Path('nonexistentfile').exists()
False

Примечание

Если путь указывает на символическую ссылку, exists() возвращает, указывает ли символическая ссылка на существующий файл или директорию.

Path.expanduser()

Возвращает новый путь с расширенными ~ и ~user конструкциями, как возвращает os.path.expanduser():

>>> p = PosixPath('~/films/Monty Python')
>>> p.expanduser()
PosixPath('/home/eric/films/Monty Python')

Добавлено в версии 3.5.

Path.glob(pattern)

Ищет файлы, соответствующие шаблону pattern в директории, представленной этим путём, и возвращает все совпавшие файлы (любого типа):

>>> sorted(Path('.').glob('*.py'))
[PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')]
>>> sorted(Path('.').glob('*/*.py'))
[PosixPath('docs/conf.py')]

Шаблон «**» означает «текущая директория и все вложенные поддиректории, рекурсивно». Другими словами, он позволяет рекурсивный поиск:

>>> sorted(Path('.').glob('**/*.py'))
[PosixPath('build/lib/pathlib.py'),
 PosixPath('docs/conf.py'),
 PosixPath('pathlib.py'),
 PosixPath('setup.py'),
 PosixPath('test_pathlib.py')]

Примечание

Использование шаблона «**» в больших деревьях директорий может потребовать значительного времени.

Path.group()

Возвращает имя группы, владеющей файлом. KeyError возбуждается, если gid файла не найдено в системной базе данных.

Path.is_dir()

Возвращает True , если путь указывает на директорию (или символическую ссылку, указывающую на директорию), False если он указывает на другой тип файла.

False также возвращается, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются.

Path.is_file()

Возвращает True , если путь указывает на обычный файл (или символическую ссылку, указывающую на обычный файл), False если он указывает на другой тип файла.

False также возвращается, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются.

Path.is_symlink()

Возвращает True , если путь указывает на символическую ссылку, False в противном случае.

False также возвращается, если путь не существует; другие ошибки (например, ошибки доступа) передаются.

Path.is_socket()

Возвращает True , если путь указывает на Unix-сокет (или символическую ссылку, указывающую на Unix-сокет), False если он указывает на другой тип файла.

False также возвращается, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются.

Path.is_fifo()

Возвращает True , если путь указывает на FIFO (или символическую ссылку, указывающую на FIFO), False если он указывает на другой тип файла.

False также возвращается, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются.

Path.is_block_device()

Возвращает True , если путь указывает на блок-устройство (или символическую ссылку, указывающую на блок-устройство), False если он указывает на другой тип файла.

False также возвращается, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются.

Path.is_char_device()

Возвращает True, если путь указывает на символьное устройство (или символическую ссылку, указывающую на символьное устройство), False, если он указывает на другой тип файла.

False также возвращается, если путь не существует или является прерванной символической ссылкой; другие ошибки (например, ошибки доступа) передаются дальше.

Path.iterdir()

Когда путь указывает на каталог, генерирует объекты пути содержимого каталога:

>>> p = Path('docs')
>>> for child in p.iterdir(): child
...
PosixPath('docs/conf.py')
PosixPath('docs/_templates')
PosixPath('docs/make.bat')
PosixPath('docs/index.rst')
PosixPath('docs/_build')
PosixPath('docs/_static')
PosixPath('docs/Makefile')
Path.lchmod(mode)

Аналогично Path.chmod(), но если путь указывает на символическую ссылку, изменяется атрибут режима символической ссылки, а не её целевого объекта.

Path.lstat()

Аналогично Path.stat(), но если путь указывает на символическую ссылку, возвращает информацию о символической ссылке, а не о её целевом объекте.

Path.mkdir(mode=0o777, parents=False, exist_ok=False)

Создаёт новую папку по указанному пути. Если задан параметр mode, он объединяется со значением режима доступа процесса umask, чтобы определить режим файла и флаги доступа. Если путь уже существует, возбуждается исключение FileExistsError.

Если параметр parents имеет значение true, все недостающие родительские каталоги по пути создаются по мере необходимости; они создаются с правами по умолчанию, не учитывая параметр mode (имитируя команду POSIX mkdir -p).

Если параметр parents имеет значение false (по умолчанию), отсутствие родительского каталога возбуждает исключение FileNotFoundError.

Если параметр exist_ok имеет значение false (по умолчанию), исключение FileExistsError возбуждается, если целевой каталог уже существует.

Если параметр exist_ok имеет значение true, исключения FileExistsError будут игнорироваться (то же поведение, что и у команды POSIX mkdir -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.rename(target)

Переименовывает этот файл или каталог в указанный target. В Unix, если target существует и является файлом, он будет заменён без предупреждений, если у пользователя есть соответствующие права. target может быть строкой или другим объектом пути:

>>> p = Path('foo')
>>> p.open('w').write('some text')
9
>>> target = Path('bar')
>>> p.rename(target)
>>> target.open().read()
'some text'
Path.replace(target)

Переименовывает этот файл или каталог в указанный target. Если target указывает на существующий файл или каталог, он будет безусловно заменён.

Path.resolve(strict=False)

Делает путь абсолютным, разрешая все символические ссылки. Возвращается новый объект пути:

>>> p = Path()
>>> p
PosixPath('.')
>>> p.resolve()
PosixPath('/home/antoine/pathlib')

Компоненты «..» также удаляются (это единственный способ сделать это):

>>> p = Path('docs/../setup.py')
>>> p.resolve()
PosixPath('/home/antoine/pathlib/setup.py')

Если путь не существует, а параметр strict имеет значение True, возбуждается исключение FileNotFoundError. Если параметр strict имеет значение False, путь разрешается по возможности, а остаток добавляется без проверки его существования. Если в процессе разрешения пути возникает бесконечный цикл, возбуждается исключение RuntimeError.

Новая в версии 3.6: Аргумент strict.

Path.rglob(pattern)

Это эквивалентно вызову Path.glob() с добавлением «**» перед заданным параметром pattern:

>>> sorted(Path().rglob("*.py"))
[PosixPath('build/lib/pathlib.py'),
 PosixPath('docs/conf.py'),
 PosixPath('pathlib.py'),
 PosixPath('setup.py'),
 PosixPath('test_pathlib.py')]
Path.rmdir()

Удаляет этот каталог. Каталог должен быть пустым.

Path.samefile(other_path)

Возвращает значение true, если этот путь указывает на тот же файл, что и other_path, который может быть объектом Path или строкой. Семантика аналогична os.path.samefile() и os.path.samestat().

Исключение OSError может быть возбуждено, если к файлу невозможно получить доступ по какой-либо причине.

>>> p = Path('spam')
>>> q = Path('eggs')
>>> p.samefile(q)
False
>>> p.samefile('spam')
True

Новая в версии 3.5.

Path.symlink_to(target, target_is_directory=False)

Преобразует этот путь в символическую ссылку на target. В Windows, параметр target_is_directory должен иметь значение true (по умолчанию False) если целевой объект ссылки является каталогом. В POSIX, значение параметра target_is_directory игнорируется.

>>> p = Path('mylink')
>>> p.symlink_to('setup.py')
>>> p.resolve()
PosixPath('/home/antoine/pathlib/setup.py')
>>> p.stat().st_size
956
>>> p.lstat().st_size
8

Примечание

Порядок аргументов (ссылка, целевой объект) обратный порядку в os.symlink().

Path.touch(mode=0o666, exist_ok=True)

Создаёт файл по данному пути. Если задан параметр mode, он объединяется со значением режима доступа процесса umask, чтобы определить режим файла и флаги доступа. Если файл уже существует, функция завершается успешно, если exist_ok имеет значение true (и время его последнего изменения обновляется до текущего времени), в противном случае возбуждается исключение FileExistsError.

Path.unlink()

Удаляет этот файл или символическую ссылку. Если путь указывает на каталог, используйте Path.rmdir() вместо этого.

Path.write_bytes(data)

Открывает файл в двоичном режиме, записывает в него данные data и закрывает файл:

>>> p = Path('my_binary_file')
>>> p.write_bytes(b'Binary file contents')
20
>>> p.read_bytes()
b'Binary file contents'

Существующий файл с тем же именем перезаписывается.

Новая в версии 3.5.

Path.write_text(data, encoding=None, errors=None)

Открывает файл в текстовом режиме, записывает в него данные data и закрывает файл:

>>> p = Path('my_text_file')
>>> p.write_text('Text file contents')
18
>>> p.read_text()
'Text file contents'

Новая в версии 3.5.

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.6/library/pathlib.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API