如何用Python批量解压ZIP文件?快速解决方案

如何用Python批量解压ZIP文件?快速解决方案

文章目录

话不多说,先上干货!!!

代码

python 复制代码
import os
import zipfile


def unzip_file(dir_path: str, zip_name: str, extract_dir: str, password: str = None):
    """
    解压指定的 ZIP 文件到目标目录。

    @param dir_path: 包含 ZIP 文件的源目录路径
    @param zip_name: ZIP 文件的名称(不带 .zip 扩展名)
    @param extract_dir: 解压后的文件存放目录
    @param password: ZIP 文件的密码(可选)
    @return: 无返回值
    """
    # 构造完整的 ZIP 文件路径
    zip_filepath = os.path.join(dir_path, zip_name + '.zip')
    # 构造解压目标路径
    extract_path = os.path.join(extract_dir, zip_name)

    # 创建解压目标目录,如果不存在
    if not os.path.exists(extract_path):
        os.makedirs(extract_path)

    try:
        # 打开 ZIP 文件
        with zipfile.ZipFile(zip_filepath, 'r') as extracting:
            # 如果设置了密码,尝试解压
            if password:
                extracting.setpassword(password.encode('utf-8'))
            # 解压所有文件到目标目录
            extracting.extractall(extract_path)
        print(f"成功解压:{zip_name}")
    except Exception as e:
        print(f"解压失败:{zip_name}, 错误:{str(e)}")


if __name__ == '__main__':
    # 设置源目录和目标目录路径
    dir_path = r'D:\桌面\baby'  # 源目录
    extract_dir = r'D:\桌面\ye'  # 目标目录

    # 获取 ZIP 文件列表
    for filename in os.listdir(dir_path):
        # 检查是否是 ZIP 文件
        if filename.endswith('.zip'):
            # 提取 ZIP 文件名(不带 .zip)
            zip_name = filename[:-4]
            try:
                # 解压 ZIP 文件,传递密码(如无需密码,可省略或设置为 None)
                unzip_file(dir_path, zip_name, extract_dir, password=None)
            except Exception as e:
                print(f"解压失败:{zip_name}, 错误:{str(e)}")
    print(f"所有 ZIP 文件已解压到:{extract_dir}")

结果

详细解释

  1. 导入必要的模块

    py 复制代码
    import os
    import zipfile
    • os:用于处理文件路径、目录创建等操作
    • zipfile:用于处理zip文件的解压
  2. unzip_file函数

    py 复制代码
    def unzip_file(dir_path: str, zip_name: str, extract_dir: str, password: str = None):
        """
        解压指定的 ZIP 文件到目标目录。
        
        @param dir_path: 包含 ZIP 文件的源目录路径
        @param zip_name: ZIP 文件的名称(不带 .zip 扩展名)
        @param extract_dir: 解压后的文件存放目录
        @param password: ZIP 文件的密码(可选)
        @return: 无返回值
        """
        # 构造完整的 ZIP 文件路径
        zip_filepath = os.path.join(dir_path, zip_name + '.zip')
        # 构造解压目标路径
        extract_path = os.path.join(extract_dir, zip_name)
        
        # 创建解压目标目录,如果不存在
        if not os.path.exists(extract_path):
            os.makedirs(extract_path)
        
        try:
            # 打开 ZIP 文件
            with zipfile.ZipFile(zip_filepath, 'r') as extracting:
                # 如果设置了密码,尝试解压
                if password:
                    extracting.setpassword(password.encode('utf-8'))
                # 解压所有文件到目标目录
                extracting.extractall(extract_path)
            print(f"成功解压:{zip_name}")
        except Exception as e:
            print(f"解压失败:{zip_name}, 错误:{str(e)}")
    • 功能:解压指定的ZIP文件到目标目录。

    • 步骤:①构造完整的ZIP文件路径和解压目标路径

      ​ ②创建解压目标目录,如果不存在则创建

      ​ ③打开ZIP文件,尝试解压到目标目录

      ​ ④处理异常,输出成功或失败信息

  3. 主程序部分

    py 复制代码
    if __name__ == '__main__':
        # 设置源目录和目标目录路径
        dir_path = r'D:\桌面\baby'  # 源目录
        extract_dir = r'D:\桌面\ye'  # 目标目录
        
        # 获取 ZIP 文件列表
        for filename in os.listdir(dir_path):
            # 检查是否是 ZIP 文件
            if filename.endswith('.zip'):
                # 提取 ZIP 文件名(不带 .zip)
                zip_name = filename[:-4]
                try:
                    # 解压 ZIP 文件,传递密码(如无需密码,可省略或设置为 None)
                    unzip_file(dir_path, zip_name, extract_dir, password=None)
                except Exception as e:
                    print(f"解压失败:{zip_name}, 错误:{str(e)}")
        print(f"所有 ZIP 文件已解压到:{extract_dir}")
    • 功能:遍历源目录,解压所有ZIP文件到目标目录。

    • 步骤:①设置源目录dir_path和目标目录extract_dir

      ​ ②遍历源目录中的所有文件,筛选出ZIP文件

      ​ ③对于每个ZIP文件,调用unzip_file函数进行解压

      ​ ④处理异常,输出解压结果

看到这里就结束了,你学会了吗???

相关推荐
zjy277773 分钟前
Layui tab选项卡如何动态根据ID值进行程序化切换
jvm·数据库·python
m0_602857766 分钟前
Redis如何修复槽位分配重叠的脏状态_使用redis-cli --cluster fix工具扫描并修复不一致的Slot
jvm·数据库·python
2301_7662834420 分钟前
怎样开启phpMyAdmin的操作审计日志_记录每条执行的SQL
jvm·数据库·python
tang7778926 分钟前
代理IP质量检测实战:Python实现IP可用性、延迟、匿名度自动测试脚本
大数据·爬虫·python·网络协议·tcp/ip
2501_9216494936 分钟前
企业定制金融数据 API:从架构设计到 Python 接入实战
大数据·开发语言·python·websocket·金融·量化
2601_956139421 小时前
政府事业机构品牌策划公司哪家专业
大数据·人工智能·python
Jmayday1 小时前
Pytorch:AI歌词生成器
人工智能·pytorch·python
枫叶林FYL1 小时前
项目八 云资源成本优化与治理平台
后端·python·自然语言处理·flask
reasonsummer1 小时前
【教学类-160-13】20260422 AI视频培训-练习013“豆包AI视频《师幼互动》+豆包图片风格:CG动画”
开发语言·python