如何在python中提取多部分zip文件?



假设我有一些从服务器下载的文件,它们用7zip压缩成多个部分,格式类似于myfile.zip。001年,myfile.zip。002年,…, myfile.zip.00n。基本上,我需要将它的内容提取到存储它们的同一个文件夹中。

我尝试使用zipfile,patoolibpyunpack没有成功,这是我所做的:

file_path = r"C:UsersuserDocumentsmyfile.zip.001" #I also tested with only .zip
extract_path = r"C:UsersuserDocuments"
#"
import zipfile
with zipfile.ZipFile(file_path, "r") as zip_ref:
zip_ref.extractall(extract_path) # myfile.zip.001 file isn't zip file.
from pyunpack import Archive
Archive(file_path).extractall(extract_path) # File is not a zip file
import patoolib
patoolib.extract_archive(file_path, outdir=extract_path) # unknown archive format for file `myfile.zip.001'

另一种方法(可以,但是很难看)是:

import os
import subprocess
path_7zip = r"C:Program Files (x86)7-Zip7z.exe"
cmd = [path_7zip, 'x', 'myfile.zip.001']
sp = subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)

但是这会让用户在他的计算机上安装7zip,这不是我想要的好方法。

所以,问题是:至少有一种方法来提取/解压缩多部分文件的格式x.zip.001在python?

您使用zipfile似乎是正确的,但是在使用extractall之前,您很可能必须将zip文件连接起来。

import os
zip_prefix = "myfile.zip."
# N number of parts
import glob
parts = glob.glob(zip_prefix + '*')
n = len(parts)
# Concatenate
with open("myfile.zip", "wb") as outfile:
for i in range(1, n+1):
filename = zip_prefix + str(i).zfill(3)
with open(filename, "rb") as infile:
outfile.write(infile.read())
# Extract
import zipfile
with zipfile.ZipFile(file_path, "r") as zip_ref:
zip_ref.extractall(extract_path)

最新更新