首页 > 编程语言 >【Python】Python实现解压rar文件

【Python】Python实现解压rar文件

时间:2024-06-15 10:54:07浏览次数:12  
标签:解压 Python rar file path size

Python实现解压rar文件

零、需求

最近在开发一个填分数的应用,需要用到selenium,那么自然需要用到浏览器,浏览器内置到应用中,但是上传到GitCode的时候被限制了,单个文件大小只能是10M以内。所以只能压缩,分卷,用的时候再解压就好。zip的分卷解压要合并后才能解压,太占用磁盘资源了,因此用rar。7z之前用过,也比较麻烦,现在想试试rar。

壹、实现

准备工作

安装rarfile

pip install rarfile

RAR程序

RAR不是开源的,没有Python实现,本质还是调用exe解压,故需要下载一个WinRAR,安装WinRAR后我们在WinRAR的安装目录中找到UnRAR.exe,把这个复制到我们项目目录下即可,这样其他电脑运行我们的代码时不需要另外安装WinRAR。
项目结构

代码实现

我们需要用到rarfile这个库,这个库的用法跟Python内置的zipfile用法一样,所以学习成本几乎为0,我们要做的就是在使用rarfile之前把UnRAR.exe添加到path环境变量中去。
我们需要把UnRAR.exe所在目录传入这个函数即可,这个函数不会改变系统的设置,只影响当前程序的环境变量,添加环境变量代码如下:

def set_path(path:str):
    """
    添加目录到path环境变量中
    :param path: 目录
    :return: None
    """
    os_path = os.environ.get('path')
    if path in os_path:
        return
    else:
        if os.path.exists(path):
            os.environ['path'] = f'{os_path};{path};'
        else:
            raise ValueError('环境变量路径不存在')

之后是解压代码的实现,这个跟zipfile一样用的:

def unrar_file(rar_file, target_path=None, password=None, progress_fun=None):
    """
    解压rar文件
    :param rar_file: 文件路径
    :param target_path: 解压目标路径
    :param password: 密码
    :param progress_fun: 进度函数,会传递一个 0-1的进度浮点
    :return: 成功 True
    """

    # 设置环境变量
    set_path(
        get_relative_path('chrome')
    )

    # 设置密码
    if not (password is None):
        password = password.encode('utf-8')
    logger.debug('解压rar文件:' + str(rar_file))

    # 打开rar文件
    rf = rarfile.RarFile(rar_file)
    try:
        file_list = rf.infolist()
        # 统计总大小
        all_size = 0
        for i in file_list:
            all_size += i.file_size
        # 解压
        unrar_size = 0
        for file in file_list:
            rf.extract(file, path=target_path, pwd=password)
            unrar_size += file.file_size
            
            # 调用显示进度的函数
            if progress_fun:
                progress_fun(unrar_size / all_size)
    except Exception as e:
        raise e
    finally:
        rf.close()
    return True

代码中get_relative_path函数是通过相对路径获取绝对路径的函数,这个与本文无关就不贴出了,返回就是一个绝对路径。代码中logger是日志对象,相当于就是打印函数,可以改成print输出。代码中progress_fun函数是打印进度的函数,接受一个浮点数,代表进度,这个大家可以自己实现一下,也可以直接删除。

贰、参考文档

标签:解压,Python,rar,file,path,size
From: https://www.cnblogs.com/minuhy/p/18249083

相关文章

  • python数据分析-淘票票电影可视化
    一、研究背景和意义在当今数字化和媒体饱和的时代,电影产业不仅是文化的重要组成部分,也是全球经济的一大推动力。电影不仅能够反映社会现实和文化趋势,还能预示和塑造公众的兴趣与期待。因此,深入分析电影数据集具有重要的实践和理论意义。通过对电影数据进行描述性统计分析,在电......
  • 【2024】 python下载快手无水印去水印视频
    无水印视频下载#coding=utf-8importrequestsimportreimportjson##url分享短视频链接#defdownload(url):headers={'User-Agent':util.window_user_agent}#获取短连接码sub=re.findall('https://v.kuaishou.com/\w{6}',......
  • 浔川计算机v1.1——浔川python科技社
    浔川计算机v1.1importtkinterimportmathimporttkinter.messageboxclassCalculator(object):#界面布局方法def__init__(self):#创建主界面,并且保存到成员属性中self.root=tkinter.Tk()self.root.minsize(280,450)......
  • Python如何离线安装第三方库?
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【斌】问了一个Python第三方库离线下载的问题,问题如下:求教大佬,这个库(python-docx/),能下载下来吗?我是链接另存为,但是速度太慢?二、实现过程这里【莫生气】给了个思路如下:直接pip安装就可以了吧?试试看加个源【斌......
  • 计算机毕业设计项目推荐,32762 外卖app系统设计与实现(开题答辩+程序定制+全套文案 )上万
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,餐饮外卖当然也不例外。外卖app系统主要功能模块包括后台首页,轮播图,资源管理(餐饮新闻,新闻分类),系统用户(注册用户,配送员,注册商家)模块管理(美食信息,外卖点餐,配......
  • 计算机毕业设计项目推荐,32650在线教培管理系统的设计与实现(开题答辩+程序定制+全套文
    目 录摘要Abstract1绪论1.1研究意义1.2开发现状1.3论文结构与章节安排2 在线教培管理系统 系统分析2.1可行性分析2.2系统流程分析2.2.1数据增加流程2.2.2数据修改流程2.2.3数据删除流程2.3 系统功能分析2.3.1功能性分析2.3.2非功......
  • 每日一题——Python实现PAT乙级1104 天长地久(举一反三+思想解读+逐步优化)七千字好文
    一个认为一切根源都是“自己不够强”的INTJ个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数Python-3.12.0文档解读目录初次尝试点评时间复杂度分析空间复杂度分析综合分析我要更强时间复杂度分析空间复杂度分析综合分析哲学和......
  • 【目标检测】基于深度学习的车牌识别管理系统(含UI界面)【python源码+Pyqt5界面 MX_002
    系统简介:        车牌识别技术作为经典的机器视觉任务,具有广泛的应用前景。通过图像处理方法,车牌识别技术能够对车牌上的字符进行检测、定位和识别,从而实现计算机对车牌的智能化管理。在现实生活中,车牌识别系统已在小区停车场、高速公路出入口、监控区域和自动收费站......
  • 基于Python+OpenCV的车牌识别停车场管理系统(PyQt界面)【含Python源码 MX_009期】
    简介:        基于Python和OpenCV的车牌识别停车场管理系统是一种利用计算机视觉技术来自动识别停车场进出车辆的系统。该系统通过摄像头捕获车辆图像,并使用OpenCV库中的图像处理和模式识别技术来识别图像中的车牌号码。一旦车牌被成功识别,系统就会将车辆的进出时间和......
  • 搭建Python虚拟环境(二):venv和virtualenv
    下面继续详细介绍各种创建虚拟环境的方式使用venv创建Python虚拟环境在Python开发中,虚拟环境是一个非常重要的概念。它允许我们为每个项目创建独立的环境,这样可以避免不同项目之间的依赖包冲突。venv是Python用于创建虚拟环境的标准库之一。本文将详细介绍如何使用v......