Python强大的RAR文件操作技巧与实例

压缩为rar使用zipfile三方库即可

解压缩则有一个特殊处理:

安装WinRAR.exe程序后,在安装目录有一个名为"UnRAR.exe" 文件,需要把"UnRAR.exe"的文件拷贝到执行的代码同一个目录下
在这里插入图片描述

代码如下:

import os
import rarfile
import zipfile

class RarOperations:

    def __init__(self):
        self.folder_path = folder_path   #要压缩的原始文件夹
        self.extract_path = extract_path  #解压缩的到路径文件夹
        self.rar_path = rar_path   #生成的rar文件  如2.rar

    def compress_folder_to_rar(self):
        """
        压缩文件夹为.rar
        :return:
        """
        with zipfile.ZipFile(self.rar_path  + '.rar'  ,'w',zipfile.ZIP_DEFLATED) as rar:
            for root,_,files in os.walk(self.folder_path):
                for file in files:
                    file_path = os.path.join(root,file)
                    arc_name = os.path.relpath(file_path,self.folder_path)   #获取文件rar中相对路径
                    rar.write(file_path,arc_name)   #将文件添加到rar文件中

    def compress_rar_from_folder_with_special_files(self,file_names=None,file_extensions=None):
        """

        :param rar_file_path:   要压缩的文件夹路径
        :param file_names:      要压缩的特定文件名列表  如[1.txt ,2.txt]     是特定的选择的文件
        :param file_extensions: 要压缩的特定文件扩展名列表 ['.txt' , '.csv']  所有类型的后缀的文件
        :return:
        """
        with zipfile.ZipFile(self.rar_path + '.rar'  ,'w',zipfile.ZIP_DEFLATED) as zip_ref:
            for root, _, files in os.walk(self.folder_path):
                for file in files:
                    path = os.path.join(root, file)
                    file_name = os.path.basename(file)
                    if file_names and file_name not in file_names:
                        continue
                    if file_extensions and not any(file.endswith(ext) for ext in file_extensions):
                        continue
                    arc_name = os.path.relpath(path, self.folder_path)
                    zip_ref.write(path, arc_name)

    def extract_rar(self):
        with rarfile.RarFile(self.rar_path,'r') as rar:
            rar.extractall(self.extract_path)


if __name__ == '__main__':
    rar_path = r'D:\remote1'
    extract_path = r'D:\2023'
    folder_path = r'D:\remote'
    # RarOperations().compress_folder_to_rar()
    # RarOperations().compress_rar_from_folder_with_special_files(file_extensions=['.xml'])
    # RarOperations().extract_rar()

解释:

首先,我们导入了需要的库:zipfile用于创建和处理ZIP、RAR格式的压缩文件,os用于操作文件和文件夹。

定义了一个名为compress_folder_to_rar的函数,它接受两个参数:folder_path表示要压缩的文件夹路径,rar_path表示压缩后的RAR文件路径。

在函数内部,我们使用zipfile.ZipFile类创建了一个RAR文件对象,并传递了rar_path、'w'(表示写入)和zipfile.ZIP_DEFLATED(用于指定压缩算法)作为参数。使用with语句可以确保在完成压缩操作后自动关闭RAR文件。

使用os.walk函数遍历文件夹中的所有文件和子文件夹。os.walk会生成一个三元组(root, dirs, files),其中root表示当前文件夹路径,dirs表示当前文件夹中的子文件夹列表,files表示当前文件夹中的文件列表。

循环遍历files中的文件列表,得到每个文件的路径file_path。

使用os.path.relpath函数获取file_path相对于folder_path的相对路径,并将其赋值给rar_path_within_rar变量。这样可以在RAR文件中保持文件的相对路径结构。

使用rar.write方法将文件添加到RAR文件中,并将rar_path_within_rar作为arcname参数传递。这样可以将文件保存在RAR文件中的指定路径下。

在示例用法部分,我们设置了folder_path和rar_path的示例路径,并调用compress_folder_to_rar函数进行压缩。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

经历一个春

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

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

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

打赏作者

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

抵扣说明:

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

余额充值