python归档日志脚本

#!/usr/bin python3
# -*- encoding=utf-8 -*-
import os
from configparser import ConfigParser
import zipfile
#####主要实现功能:1、路径处理、2、解压缩重复不压缩、3、压缩,其他的可能需要自己改写


#判断存储路径是否已经有相同文件
def same(same_list,file_path):
    ####返回空:开始压缩
    #判断文件夹是否为空,不为空。检查是否有压缩文件
    data_1=[]
    if len(same_list):
        #打开返回的文件夹内容列表
        for d1 in same_list:
            #print(d1)
            #判断是否有压缩文件,有继续
            if ".zip" in d1:
                print("有压缩文件")
                # print("解压路径",file_path +"\\" +d1 )#D:\xm\python_xm\xm1\log\
                ##最终保存压缩文件路径=file_path:保存路径+d1:压缩件名字
                frzip = zipfile.ZipFile(file_path +"\\" +d1, "r", zipfile.ZIP_DEFLATED)
                #解压获取解压包数据
                data_file = frzip.namelist()
                #关闭
                frzip.close()
                #添加解压数据到指定列表
                data_1.append(data_file)
            else:
                print("没有压缩文件")
        # print("data_1",data_1)
        #判断解压的list是否为空
        return data_1 if len(data_1) else None
    else:
        print("文件为空,没有压缩文件")
        #判断解压的list是否为空
        return data_1 if len(data_1) else None
#路径处理
def path_data(path_list):
    #获取path_list配置路径下所有信息
    usr_list=os.listdir(path_list)#['1234', '202001', '202101', '__init__.py']

    usr_dict={}
    #获取usr_list列表中文件信息
    for i in usr_list:
        # print(i)
        ss1=0
        #解决目标文件夹为空问题
        try:
            print(os.listdir(path_list+"\\"+i))
            ss1=1 if len(os.listdir(path_list+"\\"+i)) else 0
        except:
            print("目标不是文件夹")
            ss1=0
        if "20" in i and ss1:
            usr_list_kk = []
            # 拼接获取日志路径+文件信息=最终存放文件的文件夹地址
            usr_list1=os.path.join(path_list+"\\"+i)
            # print(usr_list1)
            #跳过异常
            try:
                # 打开最终单个文件夹获取文件夹中文件信息成list
                usr_list2=os.listdir(usr_list1)
                # print(usr_list2)
                #usr_list2文件夹是否为空,为空跳过
                if usr_list2:
                    #usr_list2文件不为空,读取文件夹中文件信息k
                    # print("usr_list2",usr_list2)
                    for k in usr_list2:
                        # print(k)
                        #添加到url_dict字典
                        # url_dict.update({file_path + "\\" + k:usr_list1+","+k})
                        usr_list_kk.append(k)
            except:
                print("Error:不是文件夹list")
            usr_dict.update({i:usr_list_kk})
    # 返回最终数据
    #print(url_dict)
    return usr_dict

#压缩保存方法
def path_file(a,path_list,file_path):
    same_list = os.listdir(file_path)
    print(same_list)
    # print("same_list,file_path",same_list,file_path)
    #执行数据去重方法
    data1 = same(same_list,file_path)
    #判断压缩文件是否为空
    if data1==None:
        print("创建压缩")
        # print(a)
        for k, d in a.items():
            # print(k,d,file_path + "\\" + k + ".zip")
            for d1 in d:
                # 保存路径+压缩包名
                f = zipfile.ZipFile(file_path + "\\" +d1+".zip","w",zipfile.ZIP_DEFLATED)
                # print(os.path.join(path_list+"\\"+k,d1))
                f.write(os.path.join(path_list+"\\"+k,d1),k+"\\"+d1)

                f.close()
        print("完成!")
    #找到了压缩文件并有值,做判断看是否新获取的数据,有在压缩文件重复
    else:
        print("增量压缩")
        s1=0
        for k, d in a.items():
            # print(k,d)
            for d1 in  d:
                # print(k+"/"+d1,data1[s1])
                # print("data1", data1, len(data1),k+"/"+d1)
                # data1=data1 if len(data1)>0 else k+"/"+d1
                # print("data1",data1,len(data1),k+"/"+d1)
                data2=None
                try:
                    data2=data1[s1]
                except:
                    data2=data1
                    print("下标取不到值")
                if k+"/"+d1 in data2:
                    print("重复数据不做处理")
                else:
                    #保存路径+压缩包名
                    f =zipfile.ZipFile(file_path+"\\"+d1+".zip","w",zipfile.ZIP_DEFLATED)
                    #print(os.path.join(path_list + "\\" + k, d1))
                    f.write(os.path.join(path_list + "\\" + k, d1), k + "\\" + d1)
                    f.close()
            s1 += 1
            
        print("完成!")



if __name__=="__main__":
    # 方法实例化
    conf = ConfigParser()
    # 获取配置,linux中配置路径有可能需要写绝对路径,否则无法识别
    conf.read("./path_conf.ini",encoding="utf-8")
    # #获取日志路径
    path_list = conf.get("path_url", "url1")
    # 保存压缩日志路径
    file_path = conf.get("path_url", "url2")
    #路径判断处理
    a = path_data(path_list)
    # print(a)
    #压缩保存方法
    path_file(a,path_list,file_path)

path_conf.ini配置文件

[path_url]
#获取日志路径
url1=D:\xm\python_xm\xm1\log\11
#保存压缩压缩日志路径
url2=D:\xm\python_xm\xm1\telnet_sh

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

读书小孩

您的打赏将是我前行的动力源

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

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

打赏作者

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

抵扣说明:

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

余额充值