如何使用Python解压Altium格式的*.pcbdoc复合文件
*.pcbdoc 属于微软OLE复合文档(Structured Storage)格式,不是标准ZIP/7Z压缩包,7-Zip自带OLE格式解析能力所以能正常读取,你之前用的通用解压库默认不支持该格式所以报错。以下是两种可落地的解决方案:
方案1:调用本地7-Zip程序解压(兼容性最优,和手动操作7z效果完全一致)
前提:已安装7-Zip,且将7z.exe所在路径加入系统环境变量PATH,或直接在代码中写死7z.exe的绝对路径。
import subprocess import os source_path = r"替换为你的pcbdoc文件路径" output_path = r"替换为你的解压输出文件夹路径" # 自动创建输出目录 os.makedirs(output_path, exist_ok=True) # 7z命令参数说明:x为全路径解压,-o后直接跟输出路径不要加空格,-y为自动确认所有提示 # 若未配置环境变量,将下方的'7z'替换为7z.exe绝对路径,例如 r'C:\Program Files\7-Zip\7z.exe' cmd = f'7z x "{source_path}" -o"{output_path}" -y' # 执行命令,若需要静默无日志输出,可添加参数 stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL subprocess.run(cmd, shell=True, check=True)
方案2:纯Python代码解析OLE格式解压
依赖专门处理微软复合文档的olefile库,无需安装7-Zip。
- 先安装依赖:
pip install olefile - 解压代码:
import olefile import os source_path = r"替换为你的pcbdoc文件路径" output_path = r"替换为你的解压输出文件夹路径" os.makedirs(output_path, exist_ok=True) # 加载pcbdoc文件 ole = olefile.OleFileIO(source_path) # 遍历所有内部文件流 for stream_path in ole.listdir(): # 跳过目录项,仅处理文件流 if ole.get_type(stream_path) != olefile.STGTY_STREAM: continue # 生成本地输出文件路径 local_file_path = os.path.join(output_path, *stream_path) os.makedirs(os.path.dirname(local_file_path), exist_ok=True) # 写入文件 with open(local_file_path, 'wb') as f: f.write(ole.openstream(stream_path).read()) ole.close()
内容的提问来源于stack exchange,提问作者YeP
相关产品推荐
相关产品推荐

