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)
正如另一个线程所指出的。
提前谢谢了!
考虑到您正在使用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