python实现rar解压和压缩的方法(附源码)

 更新时间:2023年10月27日 15:45:17   作者:韩半仙  
数据量现在越来越大,压缩文件在日常生活中很常用,这篇文章主要给大家介绍了关于python实现rar解压和压缩的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

1、前期准备

python解压rar格式文件,需要安装rarfile模块,去网上下载rarfile,我这里下载的是rarfile-2.4.tar.gz,解压还需要对应的UnRAR.exe

2、工具安装

 将rarfile-2.4.tar.gz拷贝到python安装路径的Scripts目录下:

cmd进入到python的Scripts目录下运行pip install rarfile-2.4.tar.gz,安装成功如下图:

3、解压rar

import os
import rarfile

base_path = r'F:\python\rar'
def unrar(base_path):
    files = os.listdir(base_path)
    files.sort()
    for path in files:
        full_path = os.path.join(base_path, path)
        print(full_path)
        z = rarfile.RarFile(full_path)
        z.extractall(base_path)
        z.close()
        os.remove(full_path)

4、压缩rar文件

def compress(input_file, output_file, root_path,
        rar_path='D:/"Program Files"/WinRAR/WinRAR.exe'):
    """
    调用CMD命令压缩文件/文件夹
    Parameters
    ----------
    input_file : 需要压缩的文件/文件夹名。从哪一级目录开始,就会从哪一级开始压缩;
    output_file : 压缩文件的输出路径及其压缩的文件名;
        可以是.rar, .zip;
    root_path: input_file 所在目录;
    rar_path : WinRAR软件的安装路径,
        The default is 'C:/"Program Files"/WinRAR/WinRAR.exe'.
        
    NOTE: 路径和文件名中带空格的时候一定要多加一重引号!!
    """
    cmd_command = r'%s a %s %s' % (rar_path, output_file, input_file)
    print(root_path)
    os.chdir(root_path) # 切换工作目录
    print(cmd_command)
    os.system(cmd_command)
    
    if os.system(cmd_command)==0:
        print('Successful backup to', output_file)
    else:
        print('Backup FAILED', input_file) 

def rar(paths):
    files = os.listdir(paths)
    for path in files:
        input_file = '"' + path + '"'
        out = path.split('.')[0] + '_bak.rar'
        out_file = '"' + out + '"'
        print(path)
        print(out)
        compress(input_file,out_file,paths)
def main():
            unrar(base_path)
            rar(base_path)

if __name__ == "__main__":
    main()

【注意】:

需要将UnRAR.exe文件放到和python脚本统计目录下,否则虽然脚本运行成功,但是不会生成解压后的文件

附:Python批量压缩解压文件(zip、rar)

# -*- coding: utf-8 -*-
"""
@Time : 2023/8/28 14:47
@Auth : RS迷途小书童
@File :Compress and Decompress Folders.py
@IDE :PyCharm
@Purpose:批量压缩/解压文件夹
"""
import os
import zipfile
 
def Compress_path_zip(path_all):
    path_all_list = os.listdir(path_all)
    # 列出总文件夹内所有需要压缩的文件夹
    for path_each in path_all_list:
        path_compress = os.path.join(path_all, path_each)
        # 待压缩的绝对路径
        if os.path.isdir(path_compress):
            print("正在压缩:%s" % path_each)
            # 遍历所有需要压缩的文件夹
            if os.path.exists(path_all + "%s.zip" % path_each):
                print(path_all + "%s1.zip" % path_each+"已存在,新文件名为'%s'" % (path_all + "%s1.zip" % path_each))
                zip_file = zipfile.ZipFile(path_all + "%s1.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
                # 创建的压缩对象用于执行后续操作
                # file_list = zip_file.namelist()
                # 列出压缩文件夹中所有文件
            else:
                zip_file = zipfile.ZipFile(path_all + "%s.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
            file_list = os.listdir(path_compress)
            # 待压缩文件夹内所有文件
            # zip_file.setpassword(b'123')
            for file_each in file_list:
                # 遍历所有文件夹内的文件
                file_path = os.path.join(path_compress, file_each)
                zip_file.write(file_path, file_each)
            zip_file.close()
        else:
            print(path_each, "不是文件夹,不进行压缩")
            continue
 
def Decompress_path_zip(path_all):
    path_all_list = os.listdir(path_all)
    for path_each in path_all_list:
        # 遍历所有需要压缩的文件夹
        if path_each.endswith('.zip'):
            print("正在解压:%s" % path_each)
            path_decompress = os.path.join(path_all, path_each)
            zip_file = zipfile.ZipFile(path_decompress, 'r')  # 压缩文件位置
            for file in zip_file.namelist():
                if os.path.exists(path_decompress[:-4]):
                    print("'%s'" % path_decompress[:-4], "已存在,新文件名为'%s'" % (path_decompress[:-4] + "1"))
                    zip_file.extract(file, path_decompress[:-4] + "1")  # 解压位置,pwd="1234".encode('utf-8')
                else:
                    zip_file.extract(file, path_decompress[:-4])  # 解压位置
            zip_file.close()
        else:
            print(path_each, "非zip文件,不进行解压!")
            continue
 
if __name__ == "__main__":
    path = "G:/try/"
    # Compress_path_zip(path)
    Decompress_path_zip(path)

总结

到此这篇关于python实现rar解压和压缩的文章就介绍到这了,更多相关python rar解压和压缩内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python tuple方法和string常量介绍

    Python tuple方法和string常量介绍

    这篇文章主要介绍了Python tuple方法和string常量,文章基于python的相关资料展开详细内容,对初学python的通知有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • 使用Python编写一个沙箱隔离功能

    使用Python编写一个沙箱隔离功能

    这篇文章主要为大家详细介绍了如何通过 Docker 实现一个简单的沙箱隔离应用,然后提供一个通过 Python 模拟沙箱的例子,感兴趣的可以了解下
    2024-12-12
  • Python中inplace、subset参数的意义及说明

    Python中inplace、subset参数的意义及说明

    这篇文章主要介绍了Python中inplace、subset参数的意义及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Python WSGI的深入理解

    Python WSGI的深入理解

    这篇文章主要给大家介绍了关于Python WSGI的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • 本地部署Python Flask并搭建web问答应用程序框架实现远程访问的操作方法

    本地部署Python Flask并搭建web问答应用程序框架实现远程访问的操作方法

    Flask是一个Python编写的Web微框架,使用Python语言快速实现一个网站或Web服务,本期教程我们使用Python Flask搭建一个web问答应用程序框架,并结合cpolar内网穿透工具将我们的应用程序发布到公共网络上,实现可多人远程进入到该web应用程序访问,需要的朋友可以参考下
    2023-12-12
  • python3使用迭代生成器实现减少内存占用

    python3使用迭代生成器实现减少内存占用

    这篇文章主要介绍了python3使用迭代生成器实现减少内存占用的相关资料,需要的朋友可以参考下
    2021-05-05
  • 基于Python的GUI图形用户界面编程详细讲解

    基于Python的GUI图形用户界面编程详细讲解

    GUI图形用户界面编程,我们可以通过python提供的丰富的组件,快速的实现使用图形的界面和用户交互, GUI编程类似于“搭积⽊”,将⼀个个组件(Widget)放到窗⼝中,这篇文章主要给大家介绍了基于Python的GUI图形用户界面编程的相关资料,需要的朋友可以参考下
    2022-12-12
  • Python 文件常数引用问题小结

    Python 文件常数引用问题小结

    Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,本文给大家介绍Python 文件常数引用问题小结,感兴趣的朋友跟随小编一起看看吧
    2025-10-10
  • Python pip安装第三方库实现过程解析

    Python pip安装第三方库实现过程解析

    这篇文章主要介绍了Python pip安装第三方库实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • python把数据框写入MySQL的方法

    python把数据框写入MySQL的方法

    这篇文章主要介绍了如何让python把数据框写入MySQL,下文利用上海市2016年9月1日公共交通卡刷卡数据的一份数据单展开其方法,需要的小伙伴可以参考一下
    2022-03-03

最新评论