【发布时间】:2022-01-12 10:18:45
【问题描述】:
我有一个 2 GB 的存档文件(最好是 .zip 或 .rar)文件(假设 100 个部分 x 20MB),我正在尝试找到一种方法来正确解压缩它。我从一个 .zip 档案开始;我有 test.zip、test.z01、test.z02...test.99 等文件。当我像这样在 Python 中合并它们时:
for zipName in zips:
with open(os.path.join(path_to_zip_file, "test.zip"), "ab") as f:
with open(os.path.join(path_to_zip_file, zipName), "rb") as z:
f.write(z.read())
然后,合并后,像thod一样解包
with zipfile.ZipFile(os.path.join(path_to_zip_file, "test.zip"), "r") as zipObj:
zipObj.extractall(path_to_zip_file)
我得到错误,likr
test.zip 文件不是 zip 文件。
然后我尝试使用 .rar 存档。我试图仅解压缩第一个文件,以查看我的代码是否会智能地查找并提取剩余的存档片段,但它没有。所以我再次合并了 .rar 文件(就像在 .zip 案例中一样),然后尝试使用 patoolib 解压缩它:
patoolib.extract_archive("test.rar", outdir="path here")
当我这样做时,我会收到如下错误:
patoolib.util.PatoolError: 找不到可执行程序来提取格式 rar;候选人是 (rar,unrar,7z)
经过一番工作,我发现这些合并的文件已损坏(我复制了它并尝试使用 WinRAR 在 Windows 上正常解压缩,但遇到了一些问题)。所以我尝试了其他方法来合并,例如使用catcat test.part.* >test.rar,但这些都没有帮助。
如何在 Python 中正确合并和解压缩这些归档文件?
【问题讨论】:
-
您不能简单地附加两个文件并假设它是一个有效的新文件。这个想法是解压缩/解压缩工具在给它这样一个集合的第一个文件时将自己处理多个文件。
-
@ThomasWeller 我试过了。只是存档库不支持这种操作。这也是 cat 不起作用的原因,可能这个 zip/rar 部分的一部分有一些应该跳过的标题等。
-
@MisterMiyagi 问题是你不明白这一点。在这种情况下,创建部件并不重要(它们是由 winrar 手动创建的)就像我说的那样,合并部件存在问题。
-
我完全同意@MisterMiyagi。你最初是如何得到这些文件的?它们可能根本不是 ZIP 文件。我可以将一个 DOC 文件重命名为 Z01,无论你怎么努力,你都无法解压缩。
-
正如我在第一条评论中所说:您可能根本不需要合并。
标签: python raspbian archive unpack