归档#

  • v1.21.0 中的新功能

该类代表了文件夹和容器文件(如ZIP和TAR归档)的概念扩展。归档允许访问任意集合的文件夹、ZIP / TAR文件和单个二进制数据元素,就好像它们都是一个层次结构文件夹树的一部分。

在PyMuPDF中,档案目前仅由Story对象使用,以指定查找字体、图像和其他资源的位置。

方法 / 属性

简短描述

Archive.add()

向档案添加新数据

Archive.has_entry()

检查给定名称是否是成员

Archive.read_entry()

读取指定名称的数据

Archive.entry_list

归档项目的列表[字典]

类 API

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

创建一个新的档案。没有参数时,将创建一个空档案。

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

  • 另一个档案:该档案正在被制作成新档案的子档案。

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

    • 一个 文件夹 将被转换为一个子档案,以便其文件(及任何子文件夹)可以通过其名称访问。

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

  • a zipfile.ZipFiletarfile.TarFile 对象:将作为子档案被添加。

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

  • 一个元组 (data, name):这将添加一个单成员子档案,其成员名称为 namedata 可以是一个 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:

TrueFalse

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'}]
>>>

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