Spec-Zone.ru › Python 3.5

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

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

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

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

../_images/pathlib-inheritance.png

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

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

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

Примечание

Этот модуль включён в стандартную библиотеку на временной основе. Несовместимые с предыдущими версиями изменения (вплоть до удаления пакета) могут произойти, если это будет сочтено необходимым разработчиками ядра.

См. также

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

См. также

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

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'

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

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

class pathlib.PurePath(*pathsegments)

Общий класс, который представляет вариант пути системы (создание его создаёт либо PurePosixPath, либо PureWindowsPath):

>>> PurePath('setup.py')      # Running on a Unix machine
PurePosixPath('setup.py')

Каждый элемент pathsegments может быть либо строкой, представляющей сегмент пути, либо другим объектом пути:

>>> 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 является символической ссылкой на другую директорию)

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.

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

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: unorderable types: PureWindowsPath() < PurePosixPath()

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')

Строковое представление пути — это сам путь файловой системы (в родном формате, например, с обратными слешами в Windows), который вы можете передать любой функции, принимающей путь к файлу в виде строки:

>>> p = PurePath('/etc')
>>> str(p)
'/etc'
>>> p = PureWindowsPath('c:/Program Files')
>>> str(p)
'c:\\Program Files'

Аналогично, вызов bytes для пути возвращает исходный путь файловой системы в виде объекта bytes, закодированного функцией os.fsencode():

>>> bytes(p)
b'/etc'

Примечание

Вызов bytes рекомендуется только в Unix. В Windows формой Unicode является каноническое представление путей к файлам.

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')

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

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)

Вычислить версию этого пути, относительную к пути, представленному 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. Если у исходного пути нет суффикса, новый 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')

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

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.

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, если uid файла не найден в системной базе данных.

Path.read_bytes()

Возвращает двоичное содержимое указанного файла в виде объекта bytes:

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

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

Path.read_text(encoding=None, errors=None)

Возвращает декодированное содержимое указанного файла в виде строки:

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

Дополнительные параметры имеют такое же значение, как и в open().

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

Path.rename(target)

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

>>> 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()

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

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

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

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

Если путь не существует, возникает исключение FileNotFoundError. Если во время разрешения пути обнаружена бесконечная петля, возникает исключение RuntimeError.

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.5/library/pathlib.html

Spec-Zone.ru

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