如何用Python提取7Zip分卷压缩文件(x.zip.001格式)
处理7Zip分卷压缩文件的Python方案
首先明确:没有纯Python库能直接识别并解压7Zip生成的.zip.001格式分卷文件——这类分卷是7Zip特有的命名方式,和标准Zip分卷的命名规则(通常是.z01/.z02+.zip)不符,所以zipfile、pyunpack、patoolib这类库都无法直接处理。
可行的纯Python方案是先将所有分卷合并为完整的压缩文件,再用对应库解压:
步骤1:合并所有分卷文件
需要把同前缀的.zip.001/.zip.002...文件按顺序合并成一个完整的Zip文件,代码示例如下:
import os import re def merge_7zip_split_zips(base_file_path, output_zip_path): # 提取分卷的基础文件名(比如从myfile.zip.001得到myfile.zip) base_filename = os.path.basename(base_file_path).rsplit('.', 1)[0] dir_path = os.path.dirname(base_file_path) # 匹配所有同前缀的分卷文件,提取分卷号 split_files = [] pattern = re.compile(rf"{re.escape(base_filename)}\.(\d+)") for filename in os.listdir(dir_path): match = pattern.match(filename) if match: split_num = int(match.group(1)) split_files.append((split_num, os.path.join(dir_path, filename))) # 按分卷号从小到大排序,确保合并顺序正确 split_files.sort(key=lambda x: x[0]) # 合并所有分卷到目标Zip文件 with open(output_zip_path, 'wb') as output_f: for _, file_path in split_files: with open(file_path, 'rb') as input_f: output_f.write(input_f.read()) return output_zip_path # 示例调用 source_base = r"C:\Users\user\Documents\myfile.zip.001" merged_zip = r"C:\Users\user\Documents\myfile_merged.zip" merge_7zip_split_zips(source_base, merged_zip)
步骤2:解压合并后的完整Zip文件
合并完成后,就可以用Python标准库zipfile正常解压了:
import zipfile extract_dir = r"C:\Users\user\Documents\" with zipfile.ZipFile(merged_zip, 'r') as zip_ref: zip_ref.extractall(extract_dir) # 可选:删除合并后的临时Zip文件 os.remove(merged_zip)
特殊情况:如果是7z格式分卷
如果你的分卷是.7z.001格式(而非Zip格式),合并后得到的是.7z文件,这时候可以用纯Python库py7zr解压(无需安装7Zip工具):
import py7zr with py7zr.SevenZipFile(merged_7z_file, mode='r') as z: z.extractall(extract_dir)
注意事项
- 确保所有分卷文件都在同一目录下,无缺失或损坏。
- 合并过程会生成临时文件,需要保证磁盘有足够的剩余空间。
内容的提问来源于stack exchange,提问作者NewbieInFlask
相关产品推荐
相关产品推荐

