iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >[python]批量解压文件夹下所有压缩包(rar、zip、7z)
  • 230
分享到

[python]批量解压文件夹下所有压缩包(rar、zip、7z)

python 2023-09-06 07:09:40 230人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

        在文件夹作用包含许多压缩包的时候,解压起来就很费时费力,尤其是在文件夹还存在嵌套的情况下,解压起来就更麻烦了。Franpper今天给大家带来递归遍历指定路径下的所有文件和文件夹,批量解压所有压缩包的方法,帮大家一键解压。  

        在文件夹作用包含许多压缩包的时候,解压起来就很费时费力,尤其是在文件夹还存在嵌套的情况下,解压起来就更麻烦了。Franpper今天给大家带来递归遍历指定路径下的所有文件和文件夹,批量解压所有压缩包的方法,帮大家一键解压。

        常见的压缩包格式有rar、zip、7z,Franpper将这几种文件的解压方式都写在了方法里,下面以7z为例为大家详细介绍一下,全部完整代码见最底部。

目录

一、代码介绍

二、注意事项

三、完整代码


一、代码介绍

        首先是函数mkdir函数,用来新建文件夹存放解压文件。

def mkdir(path):    isExists = os.path.exists(path)    if not isExists:        os.makedirs(path)        print(path + '创建成功')    else:        print(path + '目录已存在')

         生成unzip_log.txt日志文件,用来记录解压失败的文件路径,这些文件需要手动解压。

 wrong_log = os.path.join(folder_path, 'unzip_log.txt')

         递归遍历文件夹时,获取文件夹中所有文件夹的名字,如果压缩包的名字与同目录下文件夹(若存在)的名字相同,则认为已经被解压过,不对其进行解压操作。

contents = os.listdir(root)folders = [folder for folder in contents if os.path.isdir(os.path.join(root, folder))]

         对于要解压的文件,获取其名字,生成文件夹。

 zipFile_name = file.split('.')[0:-1] zipFile_name = '.'.join(zipFile_name)

         接下来进行解压操作:

with py7zr.SevenZipFile(zipFile_path, mode='r') as z:    z.extractall(path=unzip_zipFile_path)

        解压失败的文件路径记录到日志中:

with open(wrong_log, 'a') as f:    f.write(f'\n {zipFile_path}')

 二、注意事项

        需要注意的是:

        1) 在使用rarfile解压rar文件的时候会出现解压失败的情况,需要将winrar的目录中的UnRAR.exe,拷贝至python脚本目录下。如下图:

        2) 使用zipfile加压zip文件的时候会出现解压文件乱码的情况,需要将zipfile.py文件中两处按下图修改。

三、完整代码

import osimport zipfileimport rarfileimport py7zr"""解压文件"""def mkdir(path):    isExists = os.path.exists(path)    if not isExists:        os.makedirs(path)        print(path + '创建成功')    else:        print(path + '目录已存在')def unzipFile(folder_path):    wrong_log = os.path.join(folder_path, 'unzip_log.txt')    for root, dirs, files in os.walk(folder_path):        contents = os.listdir(root)        folders = [folder for folder in contents if os.path.isdir(os.path.join(root, folder))]  # 该目录下文件夹名称列表        for file in files:            if file.endswith('7z'):                zipFile_name = file.split('.')[0:-1]                zipFile_name = '.'.join(zipFile_name)                if zipFile_name in folders:                    continue                # 没有重名文件则进行解压                else:                    # 创建解压文件夹路径                    unzip_zipFile_path = os.path.join(root, zipFile_name)                    mkdir(unzip_zipFile_path)                    zipFile_path = os.path.join(root, file)                    print(zipFile_path)                    try:                        with py7zr.SevenZipFile(zipFile_path, mode='r') as z:z.extractall(path=unzip_zipFile_path)                    except:                        with open(wrong_log, 'a') as f:f.write(f'\n {zipFile_path}')            elif file.endswith('rar'):  # file 是待解压文件                # 有重名文件说明被解压过,跳过                rarFile_name = file.split('.')[0:-1]                rarFile_name = '.'.join(rarFile_name)                if rarFile_name in folders:                    continue                # 没有重名文件则进行解压                else:                    # 创建解压文件夹路径                    unzip_rarFile_path = os.path.join(root, rarFile_name)                    mkdir(unzip_rarFile_path)                    rarFile_path = os.path.join(root, file)                    print(rarFile_path)                    try:                        with rarfile.RarFile(rarFile_path) as rar_ref:rar_ref.extractall(unzip_rarFile_path)                    except:                        pass                        with open(wrong_log, 'a') as f:f.write(f'\n {rarFile_path}')            elif file.endswith('zip'):  # file 是待解压文件                # 有重名文件说明被解压过,跳过                rarFile_name = file.split('.')[0:-1]                rarFile_name = '.'.join(rarFile_name)                if rarFile_name in folders:                    continue                # 没有重名文件则进行解压                else:                    # 创建解压文件夹路径                    unzip_rarFile_path = os.path.join(root, rarFile_name)                    mkdir(unzip_rarFile_path)                    rarFile_path = os.path.join(root, file)                    print(rarFile_path)                    try:                        with zipfile.ZipFile(rarFile_path, 'r') as zip_ref:zip_ref.extractall(unzip_rarFile_path)                    except:                        with open(wrong_log, 'a') as f:f.write(f'\n {rarFile_path}')            else:                continueunzipFile(r"G:\work\")

来源地址:https://blog.csdn.net/weixin_58283091/article/details/130988374

--结束END--

本文标题: [python]批量解压文件夹下所有压缩包(rar、zip、7z)

本文链接: https://www.lsjlt.com/news/396641.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • [python]批量解压文件夹下所有压缩包(rar、zip、7z)
            在文件夹作用包含许多压缩包的时候,解压起来就很费时费力,尤其是在文件夹还存在嵌套的情况下,解压起来就更麻烦了。Franpper今天给大家带来递归遍历指定路径下的所有文件和文件夹,批量解压所有压缩包的方法,帮大家一键解压。  ...
    99+
    2023-09-06
    python
  • Python实现rar、zip和7z文件的压缩和解压
    一、7z压缩文件的压缩和解压 1、安装py7zr 我们要先安装py7zr第三方库: pip install py7zr 如果python环境有问题,执行上面那一条安装语句老是安装在默认的python环...
    99+
    2023-09-20
    python
  • Python怎么批量解压和压缩文件夹
    这篇文章主要介绍“Python怎么批量解压和压缩文件夹”,在日常操作中,相信很多人在Python怎么批量解压和压缩文件夹问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么批量解压和压缩文件夹”的疑...
    99+
    2023-06-29
  • Java实现文件压缩为zip和解压zip压缩包
    目录压缩成.zip解压.zip压缩成.zip 代码如下: public static void toZip(String srcDir, OutputStream out) th...
    99+
    2024-04-02
  • Java怎么对zip,rar,7z文件带密码解压
    这篇文章主要讲解了“Java怎么对zip,rar,7z文件带密码解压”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java怎么对zip,rar,7z文件带密码解压”吧!前言在一些日常业务中,...
    99+
    2023-07-02
  • 如何在C#中压缩和解压rar、zip文件
    这期内容当中小编将会给大家带来有关如何在C#中压缩和解压rar、zip文件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在C#.NET中压缩解压rar文件rar格式是一种具有专利文件的压缩格式,是一种商业...
    99+
    2023-06-15
  • C#压缩或解压rar、zip文件方法实例
    前言 为了便于文件在网络中的传输和保存,通常将文件进行压缩操作,常用的压缩格式有rar、zip和7z,本文将介绍在C#中如何对这几种类型的文件进行压缩和解压,并提供一些在C#中解压缩...
    99+
    2024-04-02
  • Python批量解压&压缩文件夹的示例代码
    目录一、python批量解压二、python批量压缩一、python批量解压 提示:如果是重要数据解压前请先备份,解压后会覆盖原压缩文件!! 解压前: 解压后:文件名为英文: 文...
    99+
    2024-04-02
  • Java如何实现文件压缩为zip和解压zip压缩包
    本篇内容介绍了“Java如何实现文件压缩为zip和解压zip压缩包”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!压缩成.zip代码如下:pu...
    99+
    2023-07-02
  • Java对zip,rar,7z文件带密码解压实例详解
    目录前言实现代码1、pom.xml2、zip解压3、rar解压4、7z解压5、解压统一入口封装6、测试代码补充前言 在一些日常业务中,会遇到一些琐碎文件需要统一打包到一个压缩包中上传...
    99+
    2024-04-02
  • linux下如何压缩好解压.rar文件
    这篇文章将为大家详细讲解有关linux下如何压缩好解压.rar文件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一,解压问题在网上下东西的时候,经常会遇到.rar后缀的文件,我用tar解压,...
    99+
    2023-06-05
  • java怎么压缩文件夹下所有文件
    在Java中可以使用ZipOutputStream类来压缩文件夹下的所有文件。以下是一个示例代码: import java.io.*...
    99+
    2024-03-06
    java
  • js实现根据文件url批量压缩下载成zip包
    目录前言1. 所需包2. 安装3. 引入4. 完整代码解析使用5. 部分代码解析解析 Bolb 与 arraybuffer前言 项目开发中,产品经理提了这样一个需求:将系统中的附件实...
    99+
    2023-02-09
    js url批量压缩zip包 js url批量压缩
  • Vue实现文件批量打包压缩下载
    上次做了一个选择多个数据生成多个二维码并下载,当时项目催的紧,就简单写了个循环生成二维码下载,一次性会下载很多文件,特别难整理; 刚好这次项目又遇到类似这种功能,需要一次性批量下载多...
    99+
    2024-04-02
  • java如何获取压缩包下所有文件
    要获取压缩包下的所有文件,可以使用Java的ZipFile类来实现。下面是一个示例代码: import java.io.IOExce...
    99+
    2023-10-27
    java
  • Python实现批量压缩文件/文件夹zipfile的使用
    目录【Python压缩文件夹】导入“zipfile”模块【python压缩文件】导入“zipfile”模块补充zipfile是python里用来做zip格式编码的压缩和解压缩的,由于...
    99+
    2024-04-02
  • java 批量下载将多个文件(minio中存储)压缩成一个zip包
    我的需求是将minio中存储的文件按照查询条件查询出来统一压成一个zip包然后下载下来。 思路:针对这个需求,其实可以有多个思路,不过也大同小异,一般都是后端返回流文件前端再处理下载,也有少数是压缩成zip包之后直接给下载链接返回到前端,前...
    99+
    2023-10-28
    java vue.js javascript spring boot
  • Vue怎么实现文件批量打包压缩下载
    在Vue中实现文件的批量打包压缩下载可以通过以下步骤来实现: 首先,创建一个按钮或者其他触发下载的元素,当用户点击这个按钮时触发...
    99+
    2024-03-08
    vue
  • vue如何从后台下载.zip压缩包文件
    目录1.添加下载按钮2.(原始方法,会出现乱码)给按钮添加点击事件3.(更正版)用axios({})这种方式4.报跨域问题vue前后端分离,使用element的el-button组件...
    99+
    2024-04-02
  • 里有Java如何实现压缩与解压zip文件
    里有Java如何实现压缩与解压zip文件?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java解压缩zip - 多个文件(包括文件夹),对多个文件和文件夹进行压...
    99+
    2023-05-31
    java ava zip
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作