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 版本起已弃用,将在 3.14 版本中移除: 请改用 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 对象。