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 对象。