学习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/

相关推荐
XCDoris1 小时前
郴州logo设计机构
大数据·人工智能·python
gCode Teacher 格码致知1 小时前
Pandas教学-17:Series与Dataframe的关系
开发语言·python·pandas
马良神笔2 小时前
2026 年Rag最近技术前沿总结
后端·python·django
不像程序员的程序媛3 小时前
maven基础
python·pycharm·maven
xiaogai_gai4 小时前
仅查询策略实战:从金蝶云·星空旗舰版定时拉取收料通知单
大数据·数据库·python
benchmark_cc4 小时前
Python 量化系统如何设计统一的数据访问接口:从策略解耦到数据层架构
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
const_qiu5 小时前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
估值探索者5 小时前
【Python量化选股流水线 #04】选股器好不好用?「昨日候选→今日表现」回看验收
开发语言·python·股票数据·股票数据api接口
田里的水稻6 小时前
PyTorch_Dataloader\TensorBoard---数据加载与可视化
人工智能·pytorch·python·神经网络·机器学习
Dmz丶6 小时前
前端转 AI 100 天 Day 27:Docker 容器化——从“我电脑能跑“到“到处能跑“
python