python 实现解压7z生成的zip分卷

文章目录

脚本

很常用,搞个帖子备份一下方便复制

python3 复制代码
import os
import zipfile
import sys
from io import BytesIO

def unzip_boost_split_zip(zip_prefix="xxx.zip", inputWorkDir=""):
    """
    解压7z生成的zip格式分卷文件
    :param zip_prefix: 分卷文件的前缀(如 "boost_1_87_0.zip")
    :param inputWorkDir: 分卷文件所在的目录,默认使用当前目录
    """
    file_dir = "./"
    if inputWorkDir:
        file_dir = inputWorkDir
    output_dir = file_dir  # 解压后的文件存放目录,默认和分卷同目录

    # 创建解压目录
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # 按顺序遍历所有分卷文件
    all_part_files = []
    part_number = 1
    while True:
        # 拼接分卷文件名(格式:前缀.001、前缀.002...)
        part_filename = f"{zip_prefix}.{part_number:03d}"
        part_filepath = os.path.join(file_dir, part_filename)
        if os.path.exists(part_filepath):
            all_part_files.append(part_filepath)
            part_number += 1
        else:
            break  # 没有更多分卷则停止

    if len(all_part_files) == 0:
        print("❌ 错误:未找到任何分卷文件,请检查路径/前缀是否正确!")
        return
    print(f"✅ 成功识别 {len(all_part_files)} 个分卷文件,开始合并解压...")

    # 按顺序读取所有分卷的二进制内容,合并成完整的zip文件流
    full_zip_binary = b""
    for part_path in all_part_files:
        with open(part_path, "rb") as f:
            full_zip_binary += f.read()

    # 解压合并后的完整zip文件
    try:
        with zipfile.ZipFile(BytesIO(full_zip_binary), 'r') as zip_file:
            zip_file.extractall(output_dir)  # 保留完整目录结构解压
        print(f"✅ 解压成功!所有文件已保存到: {output_dir}")
    except zipfile.BadZipFile:
        print("❌ 解压失败:分卷文件缺失/损坏/文件名被修改!")
    except Exception as e:
        print(f"❌ 解压异常:{str(e)}")

def print_usage():
    """打印脚本使用说明"""
    print("📚 脚本使用说明:")
    print("  用法1(仅指定分卷前缀,使用当前目录):")
    print(f"    python {sys.argv[0]} <zip_prefix>")
    print(f"    示例:python {sys.argv[0]} boost_1_87_0.zip")
    print("  用法2(指定分卷目录+分卷前缀):")
    print(f"    python {sys.argv[0]} <inputWorkDir> <zip_prefix>")
    print(f"    示例:python {sys.argv[0]} ./zip_files boost_1_87_0.zip")

if __name__ == "__main__":
    input_work_dir = ""
    zip_prefix = ""

    # 解析命令行参数
    if len(sys.argv) == 1:
        print("❌ 错误:缺少必要参数!")
        print_usage()
        sys.exit(1)
    elif len(sys.argv) == 2:
        # 仅传入1个参数 → 作为zip_prefix,目录用当前目录
        zip_prefix = sys.argv[1]
    elif len(sys.argv) == 3:
        # 传入2个参数 → 第一个是目录,第二个是前缀
        input_work_dir = sys.argv[1]
        zip_prefix = sys.argv[2]
    else:
        print("❌ 错误:参数数量过多!")
        print_usage()
        sys.exit(1)

    # 校验前缀参数不能为空
    if not zip_prefix:
        print("❌ 错误:分卷前缀(zip_prefix)不能为空!")
        print_usage()
        sys.exit(1)

    # 执行解压函数
    unzip_boost_split_zip(zip_prefix, input_work_dir)

使用示例

bash 复制代码
# 示例1:分卷在当前目录,仅指定前缀
python unzip_split_zip.py boost_1_87_0.zip

# 示例2:分卷在 ./my_zip 目录,指定目录+前缀
python unzip_split_zip.py ./my_zip boost_1_87_0.zip
相关推荐
喵手3 小时前
Python爬虫零基础入门【第九章:实战项目教学·第15节】搜索页采集:关键词队列 + 结果去重 + 反爬友好策略!
爬虫·python·爬虫实战·python爬虫工程化实战·零基础python爬虫教学·搜索页采集·关键词队列
Suchadar3 小时前
if判断语句——Python
开发语言·python
ʚB҉L҉A҉C҉K҉.҉基҉德҉^҉大4 小时前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
喵手4 小时前
Python爬虫零基础入门【第九章:实战项目教学·第14节】表格型页面采集:多列、多行、跨页(通用表格解析)!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·表格型页面采集·通用表格解析
0思必得04 小时前
[Web自动化] 爬虫之API请求
前端·爬虫·python·selenium·自动化
LUCIFER4 小时前
[驱动进阶——MIPI摄像头驱动(五)]rk3588+OV13855摄像头驱动加载过程详细解析第四部分——ISP驱动
linux·驱动开发
莫问前路漫漫5 小时前
WinMerge v2.16.41 中文绿色版深度解析:文件对比与合并的全能工具
java·开发语言·python·jdk·ai编程
木头左5 小时前
Backtrader框架下的指数期权备兑策略资金管理实现与风险控制
python
玄同7655 小时前
LangChain 核心组件全解析:构建大模型应用的 “乐高积木”
人工智能·python·语言模型·langchain·llm·nlp·知识图谱
喵手5 小时前
Python爬虫实战:从零构建 Hacker News 数据采集系统:API vs 爬虫的技术抉择!(附CSV导出 + SQLite 存储)!
爬虫·python·爬虫实战·hacker news·python爬虫工程化实战·零基础python爬虫教学·csv导出