You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python解析.ole文件的方法及DOORS导出reqifz中.ole文件无法被olefile识别的问题求助

Python解析.ole文件的方法及DOORS导出reqifz中.ole文件无法被olefile识别的问题求助

我之前也碰到过类似的坑,尤其是从DOORS导出的REQIFZ包里的OLE文件,经常不按标准套路来,导致olefile模块直接认不出来。给你梳理下可能的原因和可以尝试的解决方向:

可能的原因

  • OLE文件被RTF容器包裹:你提到导入Polarion后生成了.ole.rtf,而且里面实际包含OLE对象。这说明DOORS导出的.ole文件可能不是纯OLE格式,而是被RTF包装过的。olefile的isOleFile()是靠检查文件头的标准OLE魔术标识(D0 CF 11 E0 A1 B1 1A E1)来判断的,如果文件前面带了RTF的内容,自然识别失败。
  • DOORS对OLE做了私有扩展:有些工具厂商会给标准OLE格式加自己的元数据前缀或者私有结构,导致标准库识别不了。

可以尝试的解决步骤

  1. 先检查文件头:用二进制编辑器(比如Notepad++的Hex Editor插件)打开你的.ole文件,看开头几个字节是不是标准OLE的魔术头。如果不是,那大概率是前面有RTF的内容(RTF开头一般是{\rtf)。
  2. 剥离RTF提取纯OLE对象:如果文件是RTF包裹的,得先把OLE部分单独提出来。可以试试用RTF解析库处理,比如rtf或者python-docx(间接处理RTF中的OLE);也可以手动找RTF里的OLE标记(比如\objemb相关段落),然后提取对应的二进制块。
  3. 换用其他OLE处理库:如果olefile兼容性不够,试试oletools套件或者pywin32win32com.client(仅限Windows环境)。比如用oletoolsolevba工具扫一下文件,看能不能识别出OLE结构。
  4. 重新解压REQIFZ文件:有时候解压工具对REQIFZ的特殊结构处理不好,会导致文件损坏。可以试试用Polarion自带的工具或者专门的REQIF处理工具重新解压,再检查.ole文件是否正常。

实用代码片段示例

如果手动剥离太麻烦,可以直接从Polarion生成的.ole.rtf里提取OLE对象。比如用rtf库(先执行pip install rtf安装):

import rtf
import olefile

# 从.ole.rtf中提取OLE对象
with open('your_file.ole.rtf', 'rb') as rtf_file:
    doc = rtf.Reader(rtf_file)
    for idx, obj in enumerate(doc.objects):
        # 保存提取出的纯OLE文件
        extracted_ole_path = f'extracted_ole_{idx}.ole'
        with open(extracted_ole_path, 'wb') as ole_file:
            ole_file.write(obj.data)
        # 验证是否能被olefile识别
        print(f"提取的文件 {extracted_ole_path} 是否为OLE文件: {olefile.isOleFile(extracted_ole_path)}")

不过要注意,有些RTF里的OLE可能还有额外封装头,这时候可能需要对照标准OLE结构手动调整下提取的数据。

内容来源于stack exchange

火山引擎 最新活动