读写ECMA 3762(开放式包装约定)文件的库

pyecma376-2的Python项目详细描述


PyECMA376-2型

开放包装惯例(OPC)的Python实现。在

ecma376第2部分定义了“开放打包约定”,这是officeopenxml文件格式使用的打包格式。 它指定了如何在物理包(作为ZIP容器)中表示多个逻辑文件(“部分”)、如何表示这些部分之间的语义关系(使用附带的XML部分),以及如何向包中添加元数据和加密签名。 该格式分两步定义:一个包含部分、内容类型和关系的抽象逻辑包模型,以及该包模型到PKZIP文件的物理映射。在

这个Python包的目标是实现OPC包文件的逻辑模型和物理映射,以允许读写这些文件。 但是,它不提供处理包的有效负载的功能,也就是说,不包含从.docx文件等解析MS-Word文档的功能

PyECMA376-2的特点

  • 读取OPC软件包文件

    • 列出包含的部分(包括内容类型)
    • 将部件读取为类似文件的对象(包括交错部件)
    • 解析和跟踪关系
    • 解析包元数据(“核心属性”)
  • 编写OPC软件包文件

    • 创建和写入部件(通过可写的类似文件的对象,包括交错部件)
    • 添加关系(作为简单的Python对象)
    • 添加内容类型信息
    • 编写和编写包元数据(“核心属性”)

不支持就地修改包。在

当前缺少的功能

  • 读取/验证/创建加密签名

依赖性

这个包需要lxml来读写XML(有适当的XML命名空间支持)。 除此之外,只需要Python标准库。在

Python解释器必须支持python3.6或更高版本。在

使用

读取OPC软件包文件的简短示例:

importpyecma376_2withpyecma376_2.ZipPackageReader("document.docx")asreader:# List parts in packageforpart_name,content_typeinreader.list_parts():print(part_name)# Get Relationship of type "…/officeDocument" from package-level Relationshipsdocument_part_name=reader.get_related_parts_by_type("/")['http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument'][0]# Read core properties (package meta data)core_props=reader.get_core_properties()print(core_props.creator)# Open part as (binary) file-like objectwithreader.open_part(document_part_name)aspart:# XML parsing and document interpretation goes hereprint(part.read().decode())

创建并写入OPC软件包文件的简短示例:

^{pr2}$

包体系结构

本软件包的架构遵循ECMA标准的逻辑概念: package_model模块定义了抽象的OPCPackageReader和{}类,它们实现了所有的逻辑包模型功能,但省略了到ZIP文件的物理映射。 这种映射反映在抽象方法list_items()open_item()和{}中,这些抽象方法由ZipPackageReader和{}类从zip_package模块实现。在

辅助类和函数,如OPCRelationshippart_realpath和{}也包含在package_model模块中。在

许可证

该软件包由RWTH亚琛大学过程控制工程(PLT)主席MichaelThies开发。在

它是根据Apache许可证v2的条款发布的。 有关详细信息,请参见许可证和通知文件。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
ws-consumer服务地址中的java动态属性   java如何比较整数列表,然后按升序排序?   javascript我正在使用java脚本调用一个函数,但它没有调用代码下面的方法,也没有调用secretitnames()函数   在文本窗格中多次使用Java insertIcon图标   JavaMSAL安卓。AuthenticationActivity完成,但用于身份验证请求的线程池线程仍处于等待状态   if语句中的java多范围比较   java toString()表示输出   java如何在jcstrest测试中生成指令重新排序   java我怎样才能运行它?   web应用程序中使用Hibernate和Spring的java问题   如何将字符串数据写入Java文本文件   如何在java命令提示符下运行已签名的jar文件?   java从我的菜单调用RCP应用程序   java如何等待Canvas/GraphicsContext完成任务,然后再继续执行代码块?