归档#
v1.21.0 新增
这个类表示文件文件夹以及像 ZIP 和 TAR 归档这样的容器文件的泛化。归档允许访问任意集合的文件文件夹、ZIP / TAR 文件和单个二进制数据元素,就像它们都是一个分层文件夹树的一部分一样。
在 PyMuPDF 中,归档目前仅由 Story 对象用于指定在哪里查找字体、图像及其他资源。
方法 / 属性 |
简要说明 |
---|---|
向归档添加新数据 |
|
检查给定名称是否为成员 |
|
读取给定名称的数据 |
|
归档项目的 list[dict] |
类 API
- class Archive#
- __init__(self[, content[, path]])#
创建一个新的归档。不带参数时,将创建一个空归档。
如果提供,
content
可以是以下之一:另一个 Archive:该归档将成为新归档的子归档。
一个字符串:这必须是本地文件夹或文件的名称。
pathlib.Path
对象也受支持。文件夹将被转换为子归档,这样其文件(以及任何子文件夹)就可以通过其名称访问。
文件将以
"rb"
模式读取,并且这些二进制数据(一个bytes
对象)将被视为一个单成员子归档。在这种情况下,path
参数是必需的,应为此项目可被查找/检索的成员名称。
一个
zipfile.ZipFile
或tarfile.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
前缀。- 返回:
True
或False
。
- 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'}] >>>