如何用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函数进行解压

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

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

相关推荐
神也畏惧菠萝9 小时前
Day08 Python流程控制从入门到上瘾:if/match/while/for四件套,从B站登录一路打到猜数字游戏
python·算法·数据存储·for·while·if·ifelse
言乐610 小时前
通过 3D 动画直观演示球形瓶内可滑动半圆机构在倾倒时防粘盖、回正时刮膏体的运动学过程
python·3d·django·virtualenv·pygame
quantdash_cc10 小时前
ETF 行情数据清洗实战:字段语义拆解、标的池整理与五个校验清单
python·数据分析·pandas·量化交易·股票数据·quantdash
小熊恋旧10 小时前
Python 面向对象编程:方法、属性、继承与多态详解
开发语言·python
威哥爱编程10 小时前
Python 智能体开发实战 05:一问教材内容它就编?先把答案从你自己的资料里检索出来
python·agent
java_prinln11 小时前
RAG 面试题介绍
python·agent
威哥爱编程11 小时前
Python 智能体开发实战 06:一个函数里塞了八百行?用状态机把批改流程拆成能回退的步骤
python·agent
Patrick在香港11 小时前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
2601_9679801112 小时前
Python 初学者必备的常用内置函数
python·编程语言·内置函数·初学者·常用函数
OnlineProxy12 小时前
移动应用数据爬取:通过模拟器与流量嗅探对 API 进行逆向工程
爬虫·python·httpx