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

相关推荐
IvanCodes7 小时前
Python 正则表达式(十四):文本匹配、查找与替换
开发语言·python·正则表达式
夜雪一千7 小时前
Python URL编码踩坑:单层编码、双重编码实战解析
开发语言·python
茶栀(*´I`*)7 小时前
【Python数据可视化】Matplotlib从零到精通:图表核心解剖、多子图布局与三大经典图表实战
python·信息可视化·matplotlib
SelectDB技术团队8 小时前
Agent Trace 数据底座建设:宽表建模、全文检索与成本聚合的配置与验证步骤
大数据·python·clickhouse·elk·elasticsearch·全文检索·复杂查询
计算机源码社8 小时前
【27届大数据毕设】基于Spark的TikTok短视频属性分享与互动比率可视化分析系统 基于机器学习的TikTok短视频认证属性与互动效能关联分析
大数据·hadoop·python·机器学习·spark·毕业设计·课程设计
北冥有鱼被烹8 小时前
Linux timeout 命令完全指南:指定固定时间并发送固定信号
python
SunnyDays10118 小时前
如何使用 Python 将 PowerPoint(PPT 或 PPTX)转换为 Markdown
python·ppt转markdown·pptx转markdown·powerpoint转md
PiaoKe___8 小时前
云手机原理与 Python 自动化实战:ADB、REST API、WebSocket 群控入门
python·智能手机·自动化
co_wait8 小时前
Python 迭代器(一)
python
Yolanda_202210 小时前
15.dataloader的使用
python