繁体   English   中英

Python 7zip (py7zr) 未注册文件类型

[英]Python 7zip (py7zr) not registering file type

我有一个脚本来提取 .exe 文件的所有内容,但是register_archive_formatregister_unpack_format函数似乎没有按预期工作。 这是我的脚本的简短版本:

import os
import re
import py7zr
import wget
import shutil
import zipfile

versions = ["1.10", "2.0", "2.1pre"]
shutil.register_archive_format('exe', py7zr.pack_7zarchive, description="exe archive")
shutil.register_unpack_format('exe', ['.exe'], py7zr.unpack_7zarchive)
print("Supported formats:")
formats = shutil.get_unpack_formats()
print(formats, "\n")

with py7zr.SevenZipFile(f"C:/Users/Me/Documents/Builds/{version}/{filePath}", 'r') as zip_ref:
                    folderName = re.search("^([^_]+)(-installer)([^.]*)", fileNameOnly)
                    folderName = folderName[1] + folderName[3]
                    #zip_ref.extractall(f"C:/Users/Me/Documents/Builds/{version}/{folderName}")
                    shutil.unpack_archive(zip_ref, f"C:/Users/Me/Documents/Builds/{version}/{folderName}")

该代码从shutil.get_unpack_formats()打印支持的格式列表,并且似乎正确显示了注册的exe 文件。 但是当代码到达shutil.unpack_archive()函数时,它会抛出py7zr.exceptions.Bad7zFile: not a 7z file

我是否缺少从 exe 文件中提取的步骤? 我知道我可以从 exe 中提取,因为我可以通过 exe 文件的上下文菜单手动提取。

py7zr 仅支持扩展名为 foo.7z 的 7z 文件(这不是强制性的),并且二进制文件应以“7z”魔法关键字开头。 您可能想要提取一个自解压存档 ( https://en.wikipedia.org/wiki/Self-extracting_archive ),它将启动一个表示它为可执行文件的魔术字节。 该工具不支持它。

这就是为什么 py7zr 说它不是(普通的)7z 文件。

请参阅https://py7zr.readthedocs.io/en/latest/py7zr.html 的详细信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM