用Python批量获取某目录下压缩包中指定文件集

查看 15|回复 1
作者:wavezhou   
一、提前准备工作
以下两种方式根据你的实际情况二选一
1、如果你使用python没有用到虚拟环境管理工具,就直接把UnRAR.exe文件放在python安装目录下的Scripts文件夹下


如果无虚拟环境.png (28.33 KB, 下载次数: 0)
下载附件
2025-4-25 17:39 上传

2、如果你有使用虚拟环境管理工具,则把UnRAR.exe放到当前你需要使用的虚拟环境下的Scripts文件夹下


如果有虚拟环境.png (44.62 KB, 下载次数: 0)
下载附件
2025-4-25 17:39 上传

二、上代码
# _*_ coding: utf-8 _*_
import rarfile, os, re, shutil, zipfile
from os import listdir
from OperateFile import *
# param(压缩包所在文件夹的dir,指定压缩包解压后存放文件的位置,要从压缩包中匹配出的文件的文件名数组)
# return null
# @AuThor wavezhou
# @date 20211020
class BatchDecompression(object):
    def __int__(self):
        super(BatchDecompression, self)
    def __init__(self, sourcedir, targetdir, sample):
        self.source = sourcedir # 存放压缩包的目录
        self.target = targetdir # 输出压缩包中想保留的文件的存放目录
        self.sample = sample # 匹配出压缩包想保留的文件的匹配模板
        self.flag = None
        self.valid_file_list = list()
        self.origin_files = list()
        self.save_origin_other_files(sourcedir)
    def save_origin_other_files(self, sourcedir):
        for file_or_rar in os.listdir(sourcedir):
            if os.path.isfile(os.path.join(sourcedir, file_or_rar)) and str(file_or_rar)[-3:] not in (
                    'rar', 'RAR', 'ZIP', 'zip'):
                self.origin_files.append(file_or_rar)
                self.valid_file_list.append(file_or_rar)
    @staticmethod
    def compress(file_list, target_path):
        with zipfile.ZipFile(target_path, 'w', compression=zipfile.ZIP_DEFLATED) as zipf:
            for file in file_list:
                zipf.write(file, os.path.basename(file))
    def batchExt(self, pwd=None):
        if len(self.sample)
主要功能:支持从压缩包中找出你想保留的文件,并清理掉多余文件和原压缩包。
背景思想:开发这个工具类时候大模型还没问世,纯手工码字完成,用到了递归思想,简单暴力。
功能详解:
0、在使用示例main下,第一个参数是压缩包所在的目录,第二个参数是从压缩包中匹配出来的文件所要存放的目录,第三个参数是文件匹配模板列表
1、适配压缩包 rar, zip ,7z 格式的压缩包
2、指定路径下的压缩包,哪怕藏再多层的文件夹,也能通过第3个参数的匹配模板找出来你要保留的文件
3、只会保留匹配模板选中的文件,并输出到第二个参数指定的目录,其他未指定在第三个参数匹配模板列表中的文件都会被删除
4,第一个参数路径下的压缩包在代码执行完后,也会被删除

压缩包, 文件

renxiaofei991   

喜欢了,赞一个。可以哦。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部