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

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

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

相关推荐
wu_jing_sheng010 分钟前
Python中使用HTTP 206状态码实现大文件下载的完整指南
开发语言·前端·python
程序员大雄学编程19 分钟前
「用Python来学微积分」2. 函数图像的变换
python·数学·微积分
Q26433650231 小时前
【有源码】基于Python与Spark的火锅店数据可视化分析系统-基于机器学习的火锅店综合竞争力评估与可视化分析-基于用户画像聚类的火锅店市场细分与可视化研究
大数据·hadoop·python·机器学习·数据分析·spark·毕业设计
unicrom_深圳市由你创科技1 小时前
工业上位机,用Python+Qt还是C#+WPF?
python·qt·c#
njsgcs1 小时前
json转excel python pd
python·json·excel·pd
一晌小贪欢2 小时前
Python爬虫第7课:多线程与异步爬虫技术
开发语言·爬虫·python·网络爬虫·python爬虫·python3
yanxing.D4 小时前
OpenCV轻松入门_面向python(第六章 阈值处理)
人工智能·python·opencv·计算机视觉
JJJJ_iii5 小时前
【机器学习01】监督学习、无监督学习、线性回归、代价函数
人工智能·笔记·python·学习·机器学习·jupyter·线性回归
Python图像识别8 小时前
71_基于深度学习的布料瑕疵检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
python·深度学习·yolo
千码君20169 小时前
React Native:从react的解构看编程众多语言中的解构
java·javascript·python·react native·react.js·解包·解构