使用 Python 提取多部分 zip

The*_*War 6 python zip 7zip multipart

我正在寻找一种在 Windows 上使用 python 提取多部分 zip 文件(例如 blah.zip、blah.z01、blah.z02、blah.z03 等)的方法,而无需安装任何先决条件(如 7zip)。这个问题已经被问过,但唯一的答案是使用本地 7zip 安装,我宁愿避免,而且我没有足够的声誉向该线程添加评论。

我正在开发一个独立的 Windows 桌面应用程序,使用 python 来实现主要功能,其主要功能之一的重要部分是能够提取提供给它的 zip 文件。目前,我正在使用随该工具分发的便携式 7zip (7za) 来执行此操作,但由于新情况,我还需要支持多部分 zip 文件,但我似乎无法执行此操作。

我当前的代码很简单

subprocess.call('7za x -o"'+destinationPath+'" "'+zipPath+'"')
Run Code Online (Sandbox Code Playgroud)

这适用于普通 zip,但对于多部分 zip,什么也没有发生,通过 cmd 手动运行它,我得到输出

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
Processing archive: zipname.zip
Error: Can not open file as archive
Run Code Online (Sandbox Code Playgroud)

尽管桌面 7zip 完全能够使用完全相同的存档来完成此操作。我是否遗漏了 7za 命令语法中的某些内容?如果没有,除了要求用户确保安装了桌面 7zip 并尝试通过注册表等检测它的位置之外,还有其他选择吗?

我也尝试过使用 python 的 Zipfile 库,但这让我

error: "BadZipFile: Bad magic number for file header"
Run Code Online (Sandbox Code Playgroud)

正如另一个线程所指出的。

提前谢谢了!

Avi*_*ier 2

考虑到您正在使用subprocess.call(). 您可能希望将cat各个部分放在一起而不是解压缩,如下所示:

cat test.zip.* >test.zip
unzip test.zip
Run Code Online (Sandbox Code Playgroud)

subprocess.call()多个s除外。

请参阅此处: https: //unix.stackexchange.com/questions/40480/how-to-unzip-a-multipart-spanned-zip-on-linux