1 #!/usr/bin/python3 2 # -*-coding:utf-8-*- 3 import os 4 import shutil 5 import time 6 import sys 7 import subprocess 8 sys.setrecursionlimit(10000)#设置函数递归的最大深度,防止无限递归导致堆栈溢出和系统崩溃 9 10 class UnzipLogFile: 11 parentName = "D:日志巡检存放路径" 12 def __init__(self,filePath): 13 self.parentName = filePath 14 def Iszip(self,file):#此处自定义函数判断文件类型是不是压缩包类型 15 compress = [".tar.gz", ".tar.bz2", ".tar.bz", ".tar.tgz", ".tar", ".tgz", ".zip", ".rar", ".7z"] 16 for z in compress: 17 if file.endswith(z):#描述:判断字符串是否以指定字符或子字符串结尾. 18 return z 19 20 # 判断是否是MRS日志文件 21 def IsMrsLogFile(self,fileName): 22 [dirname, filename] = os.path.split(fileName) 23 mrsFiles = set(("ubp_bdc01_20", "ubp.info.20")) 24 for nameFile in mrsFiles: 25 if nameFile in filename: 26 return True 27 else: 28 continue 29 return False 30 31 #对压缩文件进行解压操作 32 def Unzip(self,srcFile, folder_name, dstDir): 33 os.chdir(folder_name) 34 if self.IsMrsLogFile(srcFile) == False: 35 return 36 order = ""C:\Program Files\7-Zip\7z.exe" x "{0}" -r -o" + dstDir 37 cmd = order.format(srcFile) 38 print("正在解压:", cmd) 39 os.popen(cmd)#调用命令行控制台程序 40 time.sleep(5) 41 # shutil.move(str(order), dstDir) 42 43 #获取某个路径下所有的文件 44 def AllFile(self,filePath): 45 os.chdir(filePath)#os.chdir()方法用于改变当前工作目录到指定的路径,路径是"D:日志巡检存放路径" 46 path = os.getcwd()#os.getcwd() 方法用于返回当前工作目录,工作目录为"D:日志巡检存放路径" 47 file_names = os.listdir("./")#os.listdir()方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序。它不包括 '.' 和'..' 即使它在文件夹中。只支持在Unix,Windows下使用。 48 for name in file_names: 49 if os.path.isfile(name):#判断路径是否为文件 50 if self.Iszip(name) in (".tar.gz", ".tar.bz2", ".tar.bz", ".tar.tgz", ".tar", ".tgz", ".zip", ".rar", ".7z"): 51 fileDir = os.path.splitext(name)[0]#分割路径,返回路径名和文件扩展名的元组 52 if os.path.exists(fileDir):#如果路径path存在,返回True;如果路径path不存在,返回False. 53 shutil.rmtree(fileDir) #递归删除一个目录以及目录内的所有内容 54 srcFile = str(path) + "\" + str(name) 55 dstDir = str(path) + "\" + str(fileDir) 56 if self.IsMrsLogFile(srcFile) == False: 57 continue 58 print("创建目录:" + fileDir) 59 os.mkdir(fileDir) 60 self.Unzip(srcFile, path, dstDir) 61 self.AllFile(dstDir) 62 elif os.path.isdir(name):#判断路径是否为目录 63 self.AllFile(path + "\" + name) 64 os.chdir(filePath) 65 path = os.getcwd() 66 67 def Run(self): 68 self.AllFile("D:日志巡检存放路径") 69 70 71 ''' 72 run = UnzipLogFile("D:日志巡检存放路径") 73 run.Run(); 74 '''