importlib.resources.abc – 资源的抽象基类

源代码: Lib/importlib/resources/abc.py


在版本 3.11 中添加。

class importlib.resources.abc.ResourceReader

已被 TraversableResources 取代

一个抽象基类,用于提供读取资源的能力。

从这个 ABC 的角度来看,资源是一个与包一起发布的二进制制品。通常,它类似于一个数据文件,该文件与包的 __init__.py 文件位于同一目录中。此类的目的是帮助抽象出对此类数据文件的访问,以便无论包及其数据文件存储在例如 zip 文件中还是文件系统中,都没有关系。

对于此类的任何方法,资源参数应为类似路径的对象,它在概念上仅表示一个文件名。这意味着资源参数中不应包含任何子目录路径。这是因为读取器所在的包的位置充当“目录”。因此,目录和文件名的隐喻分别是包和资源。这也是此类的实例应直接与特定包相关(而不是可能表示多个包或模块)的原因。

希望支持资源读取的加载器应提供一个名为 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)

如果命名的名称被认为是资源,则返回 True。如果名称不存在,则引发 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 对象,用于已加载的包。