学习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流中提取原始文件名称及数据,但不知道数据结构,还得继续查找资料。

参考文献:

1\]https://www.modb.pro/db/585135 \[2\]https://github.com/decalage2/olefile \[3\]https://olefile.readthedocs.io/en/latest/

相关推荐
曲幽6 小时前
FastAPI流式输出实战与避坑指南:让AI像人一样“边想边说”
python·ai·fastapi·web·stream·chat·async·generator·ollama
Flittly6 小时前
【从零手写 AI Agent:learn-claude-code 项目实战笔记】(1)The Agent Loop (智能体循环)
python·agent
vivo互联网技术8 小时前
ICLR2026 | 视频虚化新突破!Any-to-Bokeh 一键生成电影感连贯效果
人工智能·python·深度学习
敏编程9 小时前
一天一个Python库:virtualenv - 隔离你的Python环境,保持项目整洁
python
喝茶与编码11 小时前
Python异步并发控制:asyncio.gather 与 Semaphore 协同设计解析
后端·python
zone773911 小时前
003:RAG 入门-LangChain 读取图片数据
后端·python·面试
用户83562907805111 小时前
在 PowerPoint 中用 Python 添加和定制形状的完整教程
后端·python
用户9623779544813 小时前
🚀 docx2md-picgo:Word 文档图片一键上传图床工具
python·markdown
zone77391 天前
001:简单 RAG 入门
后端·python·面试