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

news2025/5/20 19:14:35

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

文章目录

  • **如何用Python批量解压ZIP文件?快速解决方案**
    • 代码
    • 结果
    • 详细解释

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

代码

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}")

结果

image-20250519094853517

image-20250519101131362

image-20250519101237316

详细解释

  1. 导入必要的模块

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

    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. 主程序部分

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2380190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DriveGenVLM:基于视觉-语言模型的自动驾驶真实世界视频生成

《DriveGenVLM: Real-world Video Generation for Vision Language Model based Autonomous Driving》2024年8月发表,来自哥伦比亚大学的论文。 自动驾驶技术的进步需要越来越复杂的方法来理解和预测现实世界的场景。视觉语言模型(VLM)正在成…

企业标准信息公共服务平台已开放标准通编辑器访问入口

标准通 数字化标准编辑器 专业、高效、便捷 企业标准信息公共服务平台 近日,企业标准信息公共服务平台已开放标准通编辑器访问入口,可进入官网指定版块使用! 核心功能亮点 解决企业痛点 传统标准编制,需反复核对格式、逐条…

进阶-数据结构部分:1、数据结构入门

飞书文档https://x509p6c8to.feishu.cn/wiki/HRLkwznHiiOgZqkqhLrcZNqVnLd 一、存储结构 顺序存储 链式存储 二、常用数据结构 2.1、栈 先进后出 场景: 后退/前进功能:网页浏览器中的后退和前进按钮可以使用栈来实现。在浏览网页时,每次…

React 19中useContext不需要Provider了。

文章目录 前言一、React 19中useContext移除了Provider&#xff1f;二、使用步骤总结 前言 在 React 19 中&#xff0c;useContext 的使用方式有所更新。开发者现在可以直接使用 作为提供者&#xff0c;而不再需要使用 <Context.Provider>。这一变化简化了代码结构&…

Json schema校验json字符串(networknt/json-schema-validator库)

学习链接 json-schema官网 - 英文 jsonschemavalidator 可在线校验网站 networknt的json-schema-validator github地址 networknt的json-schema-validator 个人gitee地址 - 里面有md文档说明和代码示例 JSON Schema 入门指南&#xff1a;如何定义和验证 JSON 数据结构 JS…

交易所开发:构建功能完备的金融基础设施全流程指南

交易所开发&#xff1a;构建功能完备的金融基础设施全流程指南 ——从技术架构到合规安全的系统性解决方案 一、开发流程&#xff1a;从需求分析到运维优化 开发一款功能完备的交易所需要遵循全生命周期管理理念&#xff0c;涵盖市场定位、技术实现、安全防护和持续迭代四大阶…

Axure疑难杂症:统计分析页面引入Echarts示例动态效果

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:统计分析页面引入Echarts示例动态效果 主要内容:echart示例引入、大小调整、数据导入 应用场景:统计分析页面…

展锐Android14及更新版本split_build编译方法

更改split_build.py文件内容后按照下面方法编译&#xff1a; zip -r sys/vendor/sprd/release/split_build.zip sys/vendor/sprd/release/split_build/ rm -r sys/vendor/sprd/release/split_build/ cp -r vnd/vendor/sprd/release/split_build/ sys/vendor/sprd/release/cd s…

青少年ctf平台应急响应-应急响应2

题目&#xff1a; 当前服务器被创建了一个新的用户&#xff0c;请提交新用户的用户名&#xff0c;得到的结果 ssh rootchallenge.qsnctf.com -p 30327 这个命令用于通过 SSH 协议连接到指定的远程服务器。具体解释如下&#xff1a; ssh&#xff1a;这是在 Unix-like 系统中…

k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标

k8s监控方案实践补充&#xff08;二&#xff09;&#xff1a;使用kube-state-metrics获取资源状态指标 文章目录 k8s监控方案实践补充&#xff08;二&#xff09;&#xff1a;使用kube-state-metrics获取资源状态指标一、Metrics Server简介二、kube-state-metrics实战部署1. 创…

基于SpringBoot的小型民营加油站管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

技术架构缺乏灵活性,如何应对变化需求?

技术架构缺乏灵活性会导致企业在面临市场变化、用户需求演化或新技术出现时难以及时响应&#xff0c;直接影响产品更新速度与竞争力。要有效应对变化需求&#xff0c;需要从引入模块化架构设计、推动微服务拆分、加强架构治理与决策机制、构建中台与平台化能力等方面系统推进。…

【AI时代】Java程序员大模型应用开发详细教程(上)

目录 一、大模型介绍 1. 大模型介绍 1.1 什么是大模型 1.2 技术储备 1.3 大模型的分类 2. 入门案例 3.Token的介绍 二、提示词工程 1. 好玩的提示词案例 1.1 翻译软件 1.2 让Deepseek绘画 1.3 生成数据 1.4 代码生成 2. 提示词介绍 3. Prompt Engineering最佳实…

虚拟网络编辑器

vmnet1 仅主机模式 hostonly 功能&#xff1a;虚拟机只能和宿主机通过vmnet1通信&#xff0c;不可连接其他网络&#xff08;包括互联网&#xff09; vmnet8 地址转换模式 NAT 功能&#xff1a;虚拟机可以和宿主通过vmnet8通信&#xff0c;并且可以连接其他网络&#xff0c;但是…

第31讲 循环缓冲区与命令解析

串口在持续接收数据时容易发生数据黏包&#xff08;先接收的数据尚未被处理&#xff0c;后面的数据已经将内存覆盖&#xff09;的情况&#xff0c;循环缓冲区的本质就是将串口接受到的数据马上拷贝到另外一块内存之中。为了避免新来的数据覆盖掉尚未处理的数据&#xff0c;一方…

数据结构(十)——排序

一、选择排序 1.简单选择排序 基本思想&#xff1a;假设排序表为[1,…,n]&#xff0c;第i趟排序即从[i,…,n]中选择关键字最小的元素与L[i]交换 eg&#xff1a;给定关键字序列{87&#xff0c;45&#xff0c;78&#xff0c;32&#xff0c;17&#xff0c;65&#xff0c;53&…

美蛋工具箱:一站式解决图片、视频、音频和文档处理需求的聚合神器

先放下载链接:夸克网盘下载 宝子们&#xff0c;今天不啰嗦&#xff0c;直接给大家安利一款超好用的聚合工具&#xff0c;有需要的小伙伴赶紧码住&#xff01; 今天要介绍的这款工具叫美蛋工具箱&#xff0c;它是一款聚合类工具。这个软件是绿色版的&#xff0c;聚合了图片工具…

python打卡day16

NumPy 数组基础 因为前天说了shap&#xff0c;这里涉及到数据形状尺寸问题&#xff0c;所以需要在这一节说清楚&#xff0c;后续的神经网络我们将要和他天天打交道。 知识点&#xff1a; numpy数组的创建&#xff1a;简单创建、随机创建、遍历、运算numpy数组的索引&#xff1a…

Redis 学习笔记 5:分布式锁

Redis 学习笔记 5&#xff1a;分布式锁 在前文中学习了如何基于 Redis 创建一个简单的分布式锁。虽然在大多数情况下这个锁已经可以满足需要&#xff0c;但其依然存在以下缺陷&#xff1a; 事实上一般而言&#xff0c;我们可以直接使用 Redisson 提供的分布式锁而非自己创建。…

游戏开发实战(一):Python复刻「崩坏星穹铁道」嗷呜嗷呜事务所---源码级解析该小游戏背后的算法与设计模式【纯原创】

文章目录 奇美拉项目游戏规则奇美拉(Chimeras)档案领队成员 结果展示&#xff1a; 奇美拉项目 由于项目工程较大&#xff0c;并且我打算把我的思考过程和实现过程中踩过的坑都分享一下&#xff0c;因此会分3-4篇博文详细讲解本项目。本文首先介绍下游戏规则并给出奇美拉档案。…