归档#

  • v1.21.0 新增

这个类表示文件文件夹以及像 ZIP 和 TAR 归档这样的容器文件的泛化。归档允许访问任意集合的文件文件夹、ZIP / TAR 文件和单个二进制数据元素,就像它们都是一个分层文件夹树的一部分一样。

在 PyMuPDF 中,归档目前仅由 Story 对象用于指定在哪里查找字体、图像及其他资源。

方法 / 属性

简要说明

Archive.add()

向归档添加新数据

Archive.has_entry()

检查给定名称是否为成员

Archive.read_entry()

读取给定名称的数据

Archive.entry_list

归档项目的 list[dict]

类 API

class Archive#
__init__(self[, content[, path]])#

创建一个新的归档。不带参数时,将创建一个空归档。

如果提供,content 可以是以下之一:

  • 另一个 Archive:该归档将成为新归档的子归档。

  • 一个字符串:这必须是本地文件夹或文件的名称。pathlib.Path 对象也受支持。

    • 文件夹将被转换为子归档,这样其文件(以及任何子文件夹)就可以通过其名称访问。

    • 文件将以 "rb" 模式读取,并且这些二进制数据(一个 bytes 对象)将被视为一个单成员子归档。在这种情况下,path 参数是必需的,应为此项目可被查找/检索的成员名称。

  • 一个 zipfile.ZipFiletarfile.TarFile 对象:将作为子归档添加。

  • 一个 Python 二进制对象(bytes, bytearray, io.BytesIO):这将添加一个单成员子归档。在这种情况下,path 参数是必需的,应为此项目可被查找/检索的成员名称。

  • 一个元组 (data, name):这将添加一个成员名称为 name 的单成员子归档。data 可以是 Python 二进制对象或本地文件名称(此时使用其二进制文件内容)。如果需要指定 path,请使用此格式。

  • 一个 Python 序列:这是一种方便的格式,用于指定上述任何组合。

如果提供,path 必须是字符串。

  • 如果 content 是二进制数据或文件名称,则此参数是必需的,并且必须是数据可被找到的名称。

  • 否则,此参数是可选的。它可以用于模拟一个文件夹名称或挂载点,该子归档的元素可以在其下找到。例如,Archive((data, "name"), "path") 这个规范意味着 data 将使用元素名称 "path/name" 找到。对于其他子归档也是如此:要检索 ZIP 子归档的成员,它们的名称必须以 "path/" 为前缀。此参数的主要目的可能是区分重复的名称。

注意

如果归档中存在重复的条目名称,则总是会找到/检索具有该名称的最后一个条目。在创建归档或向归档附加更多数据时(参见 Archive.add()),不会进行重复检查。使用 path 参数可以防止这种情况发生。

add(content[, path])#

附加一个子归档。参数的含义与上面解释的完全相同。当然,这里的参数 content 是非可选的。

has_entry(name)#

检查任何子归档中是否存在条目。

参数

name (str) – 条目的完全限定名称。因此必须包含条目所属子归档被添加时使用的任何 path 前缀。

返回

TrueFalse

read_entry(name)#

检索条目的数据。

参数

name (str) – 条目的完全限定名称。因此必须包含条目所属子归档被添加时使用的任何 path 前缀。

返回

条目的二进制数据(bytes)。如果未找到,则会引发异常。

entry_list#

归档的子归档列表。列表中的每个项目都是一个字典,包含以下键:

  • entries – 此子归档中的(顶级)条目名称列表。

  • fmt – 子归档的格式。这是字符串之一:“dir”(文件文件夹)、“zip”(ZIP 归档)、“tar”(TAR 归档),或用于单个二进制条目或文件内容的“tree”。

  • path – 添加此子归档时使用的 path 参数的值。

示例

>>> from pprint import pprint
>>> import pymupdf
>>> dir1 = "fitz-32"  # a folder name
>>> dir2 = "fitz-64"  # a folder name
>>> img = ("nur-ruhig.jpg", "img")  # an image file
>>> members = (dir1, img, dir2)  # we want to append these in one go
>>> arch = pymupdf.Archive()
>>> arch.add(members, path="mypath")
>>> pprint(arch.entry_list)
[{'entries': ['310', '37', '38', '39'], 'fmt': 'dir', 'path': 'mypath'},
{'entries': ['img'], 'fmt': 'tree', 'path': 'mypath'},
{'entries': ['310', '311', '37', '38', '39', 'pypy'],
'fmt': 'dir',
'path': 'mypath'}]
>>>

本软件按“原样”提供,不附带任何明示或暗示的担保。本软件根据许可进行分发,除非许可条款明确授权,否则不得复制、修改或分发。有关许可信息,请参阅 artifex.com 或联系 Artifex Software Inc., 39 Mesa Street, Suite 108A, San Francisco CA 94129, United States 获取更多信息。