最全RAR文件操作指南:如何用Python压缩、解压与筛选文件

liftword2个月前 (03-03)技术文章18

引言:

Python 对 .rar 文件进行压缩解压以及筛选特定文件的操作

代码封装一下

import os
import rarfile  #todo 用于处理 RAR 文件
import zipfile  #todo 用于处理 ZIP 文件

class RarOperations:
    def __init__(self, folder_path, extract_path, rar_path):
        """
        初始化 RarOperations 实例
        :param folder_path: 要压缩的原始文件夹路径
        :param extract_path: 解压缩的目标路径
        :param rar_path: 输出的 RAR 文件路径(不带扩展名)
        """
        self.folder_path = folder_path   #todo 设置要压缩的原始文件夹路径
        self.extract_path = extract_path  #todo 设置解压路径
        self.rar_path = rar_path   #todo 设置生成的 RAR 文件路径(不含扩展名)

    def compress_folder_to_rar(self):
        """
        压缩文件夹为 .rar 格式
        """
        #todo 使用 rarfile 库来压缩文件夹内容为 .rar 格式
        with rarfile.RarFile(self.rar_path + '.rar', 'w') as rar:
            #todo 遍历文件夹内的所有文件
            for root, _, files in os.walk(self.folder_path):
                for file in files:
                    file_path = os.path.join(root, file)  #todo 获取文件的完整路径
                    arc_name = os.path.relpath(file_path, self.folder_path)  #todo 获取文件在 RAR 中的相对路径
                    rar.write(file_path, arc_name)  #todo 添加文件到 RAR 压缩包中

    def compress_rar_from_folder_with_special_files(self, file_names=None, file_extensions=None):
        """
        压缩文件夹中特定文件到 .rar 格式
        :param file_names: 特定的文件名列表
        :param file_extensions: 特定的文件扩展名列表
        """
        with rarfile.RarFile(self.rar_path + '.rar', 'w') as rar:
            #todo 遍历文件夹中的所有文件
            for root, _, files in os.walk(self.folder_path):
                for file in files:
                    path = os.path.join(root, file)  #todo 获取文件的完整路径
                    file_name = os.path.basename(file)  #todo 获取文件的名称

                    #todo 如果提供了文件名列表,且当前文件不在该列表中,跳过该文件
                    if file_names and file_name not in file_names:
                        continue

                    #todo 如果提供了扩展名列表,且当前文件不匹配任何扩展名,跳过该文件
                    if file_extensions and not any(file.endswith(ext) for ext in file_extensions):
                        continue
                    
                    arc_name = os.path.relpath(path, self.folder_path)  #todo 获取文件相对于文件夹的路径
                    rar.write(path, arc_name)  #todo 添加符合条件的文件到 RAR 压缩包中

    def extract_rar(self):
        """
        解压 .rar 文件
        """
        #todo 使用 rarfile 解压 RAR 文件到指定路径
        with rarfile.RarFile(self.rar_path, 'r') as rar:
            rar.extractall(self.extract_path)  #todo 解压所有内容到目标路径

if __name__ == '__main__':
    #todo 设置文件夹路径和目标文件路径
    rar_path = r'D:\remote1\example.rar'  #todo 设置 RAR 文件路径(包括扩展名)
    extract_path = r'D:\2023'  #todo 设置解压路径
    folder_path = r'D:\remote'  #todo 设置要压缩的文件夹路径

    #todo 创建 RarOperations 对象,并传入相应的路径
    rar_ops = RarOperations(folder_path, extract_path, rar_path)
    
    #todo 示例:压缩整个文件夹为 RAR 文件
    rar_ops.compress_folder_to_rar()

    #todo 示例:压缩指定扩展名的文件
    rar_ops.compress_rar_from_folder_with_special_files(file_extensions=['.xml'])

    #todo 示例:解压 RAR 文件到目标文件夹
    rar_ops.extract_rar()

适用的场景

批量文件压缩:如果你需要将多个文件夹或文件压缩为 .rar 格式,或者想根据扩展名过滤后进行压缩
自动化解压流程:从外部接收到 .rar 文件,需要自动解压,可以将解压部分集成到自动化脚本中,节省大量时间。
文件管理系统:此代码可以作为一个基础模块,嵌入到更复杂的文件管理系统中,帮助用户方便地处理各种文件压缩、解压需求。

相关文章

Python全能压缩:ZIP的压缩、解压、文件筛选与删除,一键搞定!

引言:这个方法实现了文件压缩与解压的常见操作,涵盖内容如下:1、从文件夹创建 ZIP 文件 2、从文件夹创建 ZIP 文件(筛选特定文件) 3、解压 ZIP 文件中的所有内容 4、解压 ZIP...

使用 Python 压缩 PDF 或减小 PDF 文件大小的 5 种方法

在存储、共享和传输方面,处理大型 PDF 文件可能是一个真正的挑战。PDF 压缩提供了一种有效的解决方案来减小文件大小,使文档更易于管理并优化存储使用情况。压缩的 PDF 文件具有几个关键优势:降低存...

15《Python 办公自动化教程》文件压缩与解压缩

压缩包也是我们平时工作中经常要接触到的文件格式,压缩文件后缀名通常有 .zip、.rar、.7z 等等。Python 中也有专门用来操作压缩包文件的第三方模块 zipfile。听这个名字就知道是用来操...

python压缩/解压gzip 大文件

最近处理线上日志,日志文件刚好是经过压缩的,且是gz后缀。自己便采用gzip库来处理。示例如下:创建gzip文件# -- coding: utf-8 -- import gzip """ 创建gzi...

小明用Python暴力破解压缩文件zip密码,省了250块钱

那天晚上小明和你一样在某个小网站上搜寻某些私密的学习资料突然看到论坛有人提供了一个非常牛逼的资源小明怀着激动的心情下载了下来他怀着激动的心情打开了这个压缩文件看到就只有这么一个 txt 小明就是一顿双...

Python 实现图片大小压缩

起因截图组件配合验证码使用优化建议既然没人帮忙解决只能自己动手了小白先直接献上代码from PIL import Imageimport osdef compress_image(infile, ou...