归档#
v1.21.0 中的新功能
该类代表了文件夹和容器文件(如ZIP和TAR归档)的概念扩展。归档允许访问任意集合的文件夹、ZIP / TAR文件和单个二进制数据元素,就好像它们都是一个层次结构文件夹树的一部分。
在PyMuPDF中,档案目前仅由Story对象使用,以指定查找字体、图像和其他资源的位置。
方法 / 属性 |
简短描述 |
|---|---|
向档案添加新数据 |
|
检查给定名称是否是成员 |
|
读取指定名称的数据 |
|
归档项目的列表[字典] |
类 API
- class Archive#
- __init__(self[, content[, path]])#
创建一个新的档案。没有参数时,将创建一个空档案。
如果提供,
content可能是以下之一:另一个档案:该档案正在被制作成新档案的子档案。
一个字符串:这必须是本地文件夹或文件的名称。
pathlib.Path对象也受支持。一个 文件夹 将被转换为一个子档案,以便其文件(及任何子文件夹)可以通过其名称访问。
一个 文件 将以模式
"rb"读取,这些二进制数据(一个bytes对象)将被视为单一成员子档案。在这种情况下,path参数是 强制性的,应该是可以找到/检索该项的成员名称。
a
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)#
检查条目是否存在于任何子档案中。
- Parameters:
name (str) – 条目的完全限定名。因此必须包含任何
path前缀,条目的子存档已经添加在该前缀下。- Returns:
True或False。
- read_entry(name)#
检索条目的数据。
- Parameters:
name (str) – 条目的完全合格名称。因此必须包括任何
path前缀,条目的子档案已经被添加。- Returns:
条目的二进制数据 (
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'}] >>>