学习python调用olefile库解析ole文件的基本用法

  olefile是Python中用于解析和处理OLE复合文档的轻量级库,它能读取微软 Office旧格式文件(如 .doc、.xls)以及 MSI 安装包等二进制文档,提取其中的流数据、存储结构和元信息,同时支持查看文档内部结构、提取嵌入对象和元数据,适用于文件分析、文档内容提取等场景,是处理OLE格式文档的基础工具。
  运行下面命令安装olefile库。

bash 复制代码
pip install olefile


  olefile库的主要函数如下表所示:

序号 名称 说明
1 isOleFile 判断文件是否为OLE格式
2 OleFileIO 创建OLE文件对象
3 open / close 打开/关闭 OLE 文件
4 openstream 打开指定流,返回文件对象 ,如openstream('\x01Ole10Native')
5 listdir 列出OLE文件中所有的流和存储
6 exists 判断指定的流或存储在OLE文件中是否存在
7 get_size 获取指定流的字节数
8 get_type 获取指定条目的类型,返回流、存储或根目录类型
9 get_rootentry_name 获取根目录名称
10 get_metadata 获取文档元数据,返回OleMetadata 对象
11 getctime/getmtime 获取存储或流的创建/修改时间
12 get_userdefined_properties 获取指定流中的用户自定义属性
13 getclsid 获取指定流或存储的clsid
14 getproperties 获取指定流的属性

  以前面文章中提取的bin文件为例,下面的示例代码获取ole文件的所有流和存储、元数据信息:

python 复制代码
import olefile

filename='xml.bin'

# 检查文件是否为 OLE 格式
is_ole = olefile.isOleFile(filename)
print(f"Is OLE file: {is_ole}")  

with olefile.OleFileIO(filename) as ole:
    # 获取根目录信息
    root = ole.root
    print(f"Root: {root}")
    
    # 列出所有流和存储
    print("\nAll entries:")
    for entry in ole.listdir():
        print(f"  {entry}")

    # 获取元数据
    metadata = ole.get_metadata()
    print(f"Author: {metadata.author}")
    print(f"Title: {metadata.title}")
    print(f"Created: {metadata.create_time}")
    print(f"Modified: {metadata.last_saved_time}")
    
    # 获取文件属性
    print("\nProperties:")
    for prop in metadata.SUMMARY_ATTRIBS:
        value = getattr(metadata, prop, None)
        if value:
            print(f"  {prop}: {value}")


  使用olefile库也能读取OLE文件中指定流的数据,但是遇到和C#调用OpenMcdf模块解析OLE文件类似的问题,想从\x01Ole10Native流中提取原始文件名称及数据,但不知道数据结构,还得继续查找资料。

参考文献:

1https://www.modb.pro/db/585135

2https://github.com/decalage2/olefile

3https://olefile.readthedocs.io/en/latest/

相关推荐
卷无止境1 天前
RAGFlow 项目全景报告:从文档解析引擎到 Agent 原生数据库
后端·python
灿飞屋1 天前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
benchmark_cc1 天前
单只股票五档盘口接入个人研究仓库:QuantDash 读取、校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash
青少儿编程课堂1 天前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
灿飞屋1 天前
Kotlin与Java虚拟机四:函数
java·python·kotlin·安卓·android jetpack
一晌小贪欢1 天前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
一条大祥脚1 天前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
10年前端老司机1 天前
Milvus 8种检索能力实践
数据库·python·agent
Sakura_j_h_1 天前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc
大草原的小灰灰1 天前
LLM应用的标准开发框架LangChain(八)- 中间件
python·中间件·langchain