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


热门话题
Android:如何写入特定行,Java   Java中从欧元货币字符串中删除空格的数字   Java非均匀多维数组   解密AES时出现java空指针异常   java ConcurrentModificationException尝试移除列表上的所有内容时(非迭代)   Java数学库计算日志   java ISO8601,使用Jackson以毫秒表示json   避免副作用的java最佳实践   java获取JMeterException:调用bsh方法时出错:未定义参数:saa。使用beanshell取样器时   使用javascript将会话从一个jsp页面传输到另一个jsp页面   java在列表中组合相邻元素   java多行JTextPane   java Hibernate映射文件连接两个表而不定义关系?   如何使用Ajax、Java和Spring框架将文件从网页上传到Google云存储   多线程多线程Java中producerconsumer代码的多线程没有提供正确的输出?