Spec-Zone.ru › Python 3.10

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

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

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

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

../_images/pathlib-inheritance.png

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

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

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

См. также

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

Представляет путь как 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_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(), но если путь указывает на символическую ссылку, возвращается информация о символьной ссылке, а не о ее целевом объекте.

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

os и os.path

pathlib

os.path.abspath()

Path.resolve() 1

os.chmod()

Path.chmod()

os.mkdir()

Path.mkdir()

os.makedirs()

Path.mkdir()

os.rename()

Path.rename()

os.replace()

Path.replace()

os.rmdir()

Path.rmdir()

os.remove(), os.unlink()

Path.unlink()

os.getcwd()

Path.cwd()

os.path.exists()

Path.exists()

os.path.expanduser()

Path.expanduser() и Path.home()

os.listdir()

Path.iterdir()

os.path.isdir()

Path.is_dir()

os.path.isfile()

Path.is_file()

os.path.islink()

Path.is_symlink()

os.link()

Path.hardlink_to()

os.symlink()

Path.symlink_to()

os.readlink()

Path.readlink()

os.path.relpath()

PurePath.relative_to() 2

os.stat()

Path.stat(), Path.owner(), Path.group()

os.path.isabs()

PurePath.is_absolute()

os.path.join()

PurePath.joinpath()

os.path.basename()

PurePath.name

os.path.dirname()

PurePath.parent

os.path.samefile()

Path.samefile()

os.path.splitext()

PurePath.stem и PurePath.suffix

Примечания

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

Spec-Zone.ru

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