importlib.resources.abc.md
1> **Источник:** https://python-all.ru/3.14/library/importlib.resources.abc.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `importlib.resources.abc` – Абстрактные базовые классы для ресурсов89**Исходный код:** [Lib/importlib/resources/abc.py](https://python-all.ru/src/3.14/Lib/importlib/resources/abc.py)1011---1213Добавлено в версии 3.12.1415#### `class importlib.resources.abc.ResourceReader`1617*Заменено на TraversableResources*1819An [abstract base class](https://python-all.ru/3.14/glossary.html#term-abstract-base-class) to provide the ability to read *resources*.2021С точки зрения этого ABC, *ресурс* – это бинарный артефакт, поставляемый внутри пакета. Обычно это что-то вроде файла данных, который находится рядом с `__init__.py`-файлом пакета. Назначение этого класса – абстрагировать доступ к таким файлам данных, чтобы не имело значения, хранятся ли пакет и его файлы данных, например, в zip-файле или в файловой системе.2223Для любого из методов этого класса аргумент *resource* должен быть [path-подобным объектом](https://python-all.ru/3.14/glossary.html#term-path-like-object), который по сути представляет собой имя файла. Это означает, что в аргументе *resource* не должно быть путей к подкаталогам. Это связано с тем, что местоположение пакета, для которого предназначен читатель, выступает в роли «каталога». Следовательно, метафора каталогов и имён файлов – это пакеты и ресурсы соответственно. Именно поэтому экземпляры этого класса должны напрямую соответствовать конкретному пакету (а не потенциально представлять несколько пакетов или модуль).2425Загрузчики, желающие поддерживать чтение ресурсов, должны предоставить метод с именем `get_resource_reader(fullname)`, который возвращает объект, реализующий интерфейс этого ABC. Если модуль, указанный fullname, не является пакетом, этот метод должен вернуть [`None`](https://python-all.ru/3.14/library/constants.html#None). Объект, совместимый с этим ABC, должен возвращаться только тогда, когда указанный модуль является пакетом.2627Устарело с версии 3.12: Используйте [`importlib.resources.abc.TraversableResources`](https://python-all.ru/3.14/library/importlib.resources.abc.html#importlib.resources.abc.TraversableResources).2829#### `abstractmethod open_resource(resource)`3031Возвращает открытый [файлоподобный объект](https://python-all.ru/3.14/glossary.html#term-file-like-object) для бинарного чтения *ресурса*.3233Если ресурс не найден, выбрасывается [`FileNotFoundError`](https://python-all.ru/3.14/library/exceptions.html#FileNotFoundError).3435#### `abstractmethod resource_path(resource)`3637Возвращает путь в файловой системе к *ресурсу*.3839Если ресурс не существует на файловой системе в конкретном виде, возбуждается [`FileNotFoundError`](https://python-all.ru/3.14/library/exceptions.html#FileNotFoundError).4041#### `abstractmethod is_resource(path)`4243Возвращает `True`, если именованный *path* считается ресурсом. [`FileNotFoundError`](https://python-all.ru/3.14/library/exceptions.html#FileNotFoundError) выбрасывается, если *path* не существует.4445Изменено в версии 3.10: Аргумент *name* был переименован в *path*.4647#### `abstractmethod contents()`4849Возвращает [итерируемый объект](https://python-all.ru/3.14/glossary.html#term-iterable) со строками по содержимому пакета. Обратите внимание, что не все имена, возвращаемые итератором, должны быть реальными ресурсами; например, допустимо возвращать имена, для которых [`is_resource()`](https://python-all.ru/3.14/library/importlib.resources.abc.html#importlib.resources.abc.ResourceReader.is_resource) будет ложным.5051Разрешение возвращать имена, не являющиеся ресурсами, предусмотрено для ситуаций, когда заранее известно, как хранятся пакет и его ресурсы, и такие имена могут быть полезны. Например, разрешается возвращать имена подкаталогов, чтобы, когда известно, что пакет и ресурсы хранятся в файловой системе, эти имена подкаталогов можно было использовать напрямую.5253Абстрактный метод возвращает итерируемый объект без элементов.5455#### `class importlib.resources.abc.Traversable`5657Объект с подмножеством методов [`pathlib.Path`](https://python-all.ru/3.14/library/pathlib.html#pathlib.Path), подходящих для обхода каталогов и открытия файлов.5859Для представления объекта в файловой системе используйте [`importlib.resources.as_file()`](https://python-all.ru/3.14/library/importlib.resources.html#importlib.resources.as_file).6061#### `name`6263Абстрактный. Базовое имя этого объекта без каких-либо ссылок на родительские элементы.6465#### `abstractmethod iterdir()`6667Возвращает объекты Traversable внутри self.6869#### `abstractmethod is_dir()`7071Возвращает `True`, если self является каталогом.7273#### `abstractmethod is_file()`7475Возвращает `True`, если self является файлом.7677#### `abstractmethod joinpath(*pathsegments)`7879Обходит каталоги в соответствии с *pathsegments* и возвращает результат в виде `Traversable`.8081Каждый аргумент *pathsegments* может содержать несколько имён, разделённых прямыми слешами (`/`, `posixpath.sep` ). Например, следующие записи эквивалентны:8283```python84files.joinpath('subdir', 'subsuddir', 'file.txt')85files.joinpath('subdir/subsuddir/file.txt')86```8788Обратите внимание: некоторые реализации `Traversable` могут не соответствовать последней версии протокола. Для совместимости с такими реализациями передавайте единственный аргумент без разделителей пути в каждый вызов `joinpath`. Например:8990```python91files.joinpath('subdir').joinpath('subsubdir').joinpath('file.txt')92```9394Изменено в версии 3.11: `joinpath` принимает несколько *pathsegments*, и эти сегменты могут содержать прямые слеши в качестве разделителей пути. Ранее принимался только один аргумент *child*.9596#### `abstractmethod __truediv__(child)`9798Возвращает дочерний элемент Traversable в self. Эквивалентно `joinpath(child)`.99100#### `abstractmethod open(mode='r', *args, **kwargs)`101102*mode* может быть 'r' или 'rb' для открытия в текстовом или бинарном режиме. Возвращает дескриптор, подходящий для чтения (то же самое, что [`pathlib.Path.open`](https://python-all.ru/3.14/library/pathlib.html#pathlib.Path.open)).103104При открытии в текстовом режиме принимает параметры кодировки, аналогичные тем, что принимаются [`io.TextIOWrapper`](https://python-all.ru/3.14/library/io.html#io.TextIOWrapper).105106#### `read_bytes()`107108Читает содержимое self как байты.109110#### `read_text(encoding=None)`111112Читает содержимое self как текст.113114#### `class importlib.resources.abc.TraversableResources`115116Абстрактный базовый класс для считывателей ресурсов, способных обслуживать интерфейс [`importlib.resources.files()`](https://python-all.ru/3.14/library/importlib.resources.html#importlib.resources.files). Подклассы [`ResourceReader`](https://python-all.ru/3.14/library/importlib.resources.abc.html#importlib.resources.abc.ResourceReader) и предоставляют конкретные реализации абстрактных методов `ResourceReader`. Поэтому любой загрузчик, предоставляющий `TraversableResources`, также предоставляет `ResourceReader`.117118Загрузчики, поддерживающие чтение ресурсов, должны реализовать этот интерфейс.119120#### `abstractmethod files()`121122Возвращает объект [`importlib.resources.abc.Traversable`](https://python-all.ru/3.14/library/importlib.resources.abc.html#importlib.resources.abc.Traversable) для загруженного пакета.123