python批量解压rar和zip的压缩包

一、学习目标:

批量解压一个目录下的所有rar和zip的压缩包。
之前只是解压zip,今天想解压的里面也有rar,奈何之前脚本跑不了,然后就优化了下。

我之前的俩篇博客:
python 解压zip压缩文件,并且还原中文文件名乱码问题

python对window对一个目录下的所有子目录批量压缩

1、安装模块:

pip install rarfile

2、rarfile.RarCannotExec: Cannot find working tool问题:

解压rar会报错:
这个我在本机电脑找到了,放到了蓝奏云上面。需要的下载即可。
下载文件:https://wwa.lanzous.com/ikZcNkw4kkb

然后把文件放到项目的Scripts目录下面。

参考文章:
https://blog.csdn.net/weixin_30389003/article/details/99440841

3、批量解压代码:

import zipfile
import os
from pathlib import Path
import rarfile
import os


def unzip_file(file_zip_path):
    new_zip_dir = file_zip_path.rsplit('\\',1)[0] + '/data'
    if not os.path.isdir(new_zip_dir):
        os.makedirs(new_zip_dir)
    zFile = zipfile.ZipFile(file_zip_path, "r")
    # ZipFile.namelist(): 获取ZIP文档内所有文件的名称列表
    for fileM in zFile.namelist():
        # zFile.extract(fileM, new_zip_dir)
        # 解压出来单个文件
        extracted_path = Path(zFile.extract(fileM,new_zip_dir))
        # print("fileM.encode('cp437').decode('gbk')",fileM.encode('cp437').decode('gbk'))
        # print("extracted_path",extracted_path)
        # 文件重命名,将中文的文件名还原
        extracted_path.rename(new_zip_dir+'//'+fileM.encode('cp437').decode('gbk'))
    zFile.close()
    return new_zip_dir


def unrar_file(filename):
    new_zip_dir = filename.rsplit('\\', 1)[0] + '/data'
    if not os.path.isdir(new_zip_dir):
        os.makedirs(new_zip_dir)

    rar = rarfile.RarFile(filename, mode='r')  # mode的值只能为'r'
    rar.extractall(new_zip_dir)  # 解压文件
    rar.close()  # 关闭文件,必须有,释放内存


if __name__ == '__main__':
    dir_path = r"压缩包的目录"
    file_name_list = os.listdir(dir_path)
    for file_name in file_name_list:
        file_name_path = os.path.join(dir_path,file_name)
        if os.path.isfile(file_name_path):
            print("准备解压",file_name_path)
            if file_name.endswith('.zip'):
                
                unzip_file(file_name_path)
            elif file_name.endswith('.rar'):
       
                unrar_file(file_name_path)
            else:
                print("不是压缩文件",file_name_path)
        else:
            print("不是文件",file_name_path)


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhaojiafu666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值