#!/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