读写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第三方库


热门话题
java在Android Studio中使用while循环显示包含textview对象的数据   创建名为“userController”的bean时发生java错误:通过字段“userService”表示未满足的依赖关系   java PDFBox PDFImageWrite。writeImage未正确处理所有字符   java无法识别代码中的nzec错误   无法更改java TabLayout字体   在Java中使用子字符串删除部分字符串   Java中的listener addPropertyChangeListener方法   java可以同时拖动多个对象   java如何将数组中的值添加到向量中   java为什么在Camel 3.7.3中无法正确计算属性?   与后端问题不同的机器中的java客户端资源   带字符串的java分割字节数组?   java On_选项_项目_选择的方法说明   java如何在画布的父画中画一个圆?   连接超时和打开连接数的java Netty通道配置   java mysql中如何防止向数据库中插入重复数据   升级到macOS Big Sur后,java无法启动Neo4j控制台应用程序   在Java中使用XSLT将XML转换为HTMLString的ajax   java无法使用Apache POI获取Excel工作表中的数据