文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-06 07:51

关注

        在文件夹作用包含许多压缩包的时候,解压起来就很费时费力,尤其是在文件夹还存在嵌套的情况下,解压起来就更麻烦了。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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯