importlib.resources.abc
– 资源的抽象基类¶
源代码: Lib/importlib/resources/abc.py
在 3.11 版本中新增。
- class importlib.resources.abc.ResourceReader¶
已被 TraversableResources 取代
一个提供读取*资源*能力的抽象基类。
在此 ABC 看来,*资源*是包内附带的二进制工件。通常,这类似于包的
__init__.py
文件旁的数据文件。这个类的目的是帮助抽象化对此类数据文件的访问,从而无论包及其数据文件是存储在 zip 文件中还是文件系统上,访问方式都一样。对于该类的任何方法,*resource* 参数应为一个类路径对象,它在概念上只代表一个文件名。这意味着 *resource* 参数中不应包含任何子目录路径。这是因为读取器所对应的包的位置,就扮演了“目录”的角色。因此,目录和文件名的比喻,分别对应着包和资源。这也是为什么该类的实例应直接与特定的包相关联(而不是可能代表多个包或一个模块)。
希望支持资源读取的加载器,应提供一个名为
get_resource_reader(fullname)
的方法,该方法返回一个实现了此 ABC 接口的对象。如果 fullname 指定的模块不是一个包,此方法应返回None
。只有当指定的模块是包时,才应返回与此 ABC 兼容的对象。自 3.12 版本起不推荐使用: 请改用
importlib.resources.abc.TraversableResources
。- abstractmethod open_resource(resource)¶
返回一个已打开的、用于二进制读取*资源*的类文件对象。
如果找不到资源,则引发
FileNotFoundError
。
- abstractmethod resource_path(resource)¶
返回*资源*的文件系统路径。
如果资源在文件系统上并未具体存在,则引发
FileNotFoundError
。
- abstractmethod is_resource(name)¶
如果指定的 *name* 被视为资源,则返回
True
。如果 *name* 不存在,则引发FileNotFoundError
。
- abstractmethod contents()¶
返回一个包含包内容的字符串可迭代对象。请注意,不要求迭代器返回的所有名称都是实际资源,例如,返回的名称对于
is_resource()
可能为 false,这是可接受的。允许返回非资源名称,是为了应对那些预先知道包及其资源存储方式,并且非资源名称有用的情况。例如,允许返回子目录名称,这样当已知包和资源存储在文件系统上时,这些子目录名称就可以直接使用。
该抽象方法返回一个不含任何项的可迭代对象。
- class importlib.resources.abc.Traversable¶
一个包含
pathlib.Path
部分方法,适用于遍历目录和打开文件的对象。要获取对象在文件系统上的表示,请使用
importlib.resources.as_file()
。- name¶
抽象属性。此对象的基本名称,不含任何父级引用。
- abstractmethod iterdir()¶
生成 self 中的 Traversable 对象。
- abstractmethod is_dir()¶
如果 self 是目录,则返回
True
。
- abstractmethod is_file()¶
如果 self 是文件,则返回
True
。
- abstractmethod joinpath(*pathsegments)¶
根据 *pathsegments* 遍历目录,并将结果作为
Traversable
返回。每个 *pathsegments* 参数都可以包含多个由正斜杠(
/
,即posixpath.sep
)分隔的名称。例如,以下写法是等价的:files.joinpath('subdir', 'subsuddir', 'file.txt') files.joinpath('subdir/subsuddir/file.txt')
请注意,某些
Traversable
实现可能未更新到协议的最新版本。为与此类实现兼容,请在每次调用joinpath
时提供单个不含路径分隔符的参数。例如:files.joinpath('subdir').joinpath('subsubdir').joinpath('file.txt')
在 3.11 版本发生变更:
joinpath
接受多个 *pathsegments*,并且这些段可以包含正斜杠作为路径分隔符。以前只接受单个 *child* 参数。
- abstractmethod __truediv__(child)¶
返回 self 中的子 Traversable 对象。等价于
joinpath(child)
。
- abstractmethod open(mode='r', *args, **kwargs)¶
*mode* 可以是 'r' 或 'rb',分别以文本或二进制模式打开。返回一个适合读取的句柄(与
pathlib.Path.open
相同)。当以文本模式打开时,接受编码参数,例如
io.TextIOWrapper
所接受的参数。
- read_bytes()¶
以字节形式读取 self 的内容。
- read_text(encoding=None)¶
以文本形式读取 self 的内容。
- class importlib.resources.abc.TraversableResources¶
一个资源读取器的抽象基类,能够服务于
importlib.resources.files()
接口。它继承自ResourceReader
,并为ResourceReader
的抽象方法提供了具体实现。因此,任何提供TraversableResources
的加载器,也同时提供了ResourceReader
。希望支持资源读取的加载器,应实现此接口。
- abstractmethod files()¶
为已加载的包返回一个
importlib.resources.abc.Traversable
对象。