工作需要,将已经打好的war包解压出来,重新压缩WEB-INF中的classes文件夹到WEB-INF.zip
那就只好从实际出发,用代码来了解一下python的压缩解压缩了。
1#!/usr/bin/env python 2# encoding: utf-8 3 4""" 5@version: 1.0 6@author: jiangmtiao 7@site: my.oschina.net/jiangmitiao/blog 8@software: PyCharm 9@file: autoPackage.py 10@time: 2016/3/23 9:42 11@description: TODO 12""" 13import os 14import zipfile 15 16 17class AutoPackage(object): 18 def __init__(self, mavenPath="auto", projectPath="./"): 19 self.mavenPath = mavenPath 20 self.projectPath = projectPath 21 self.fileName = None 22 pass 23 24 def check(self): 25 # 检查是否有war文件,不存在则退出 26 tmpPath = os.path.join(self.projectPath, 'target/') 27 if not os.path.exists(tmpPath): 28 print "no target" 29 exit(-1) 30 pass 31 for fn in os.listdir(os.path.join(self.projectPath, 'target/')): 32 if fn.endswith(".war"): 33 self.fileName = fn 34 break 35 pass 36 pass 37 if self.fileName is None: 38 print " no *.war" 39 exit(-1) 40 pass 41 pass 42 43 def package(self): 44 tmpPath = self.projectPath + 'target/' 45 46 # 解压指定的文件 47 zipFile = zipfile.ZipFile(os.path.join(tmpPath, self.fileName)) 48 49 for f in zipFile.namelist(): 50 if f.find("classes/com") > 0: 51 zipFile.extract(f, tmpPath) 52 pass 53 pass 54 55 # 准备压缩文件 56 zpfd = zipfile.ZipFile(tmpPath + "/WEB-INF.zip", mode='w') 57 for dirpath, dirnames, filenames in os.walk(tmpPath + "/WEB-INF"): 58 for filename in filenames: 59 #oldFilename是相对路径或者绝对路径 60 oldFilename = os.path.join(dirpath, filename) 61 #zipFileName是打入压缩包中的文件路径 62 zipFileName = dirpath.replace(tmpPath + "/WEB-INF\\", "") + "/" + filename 63 zpfd.write(oldFilename, zipFileName) 64 pass 65 pass 66 67 zpfd.close() 68 pass 69 70 71if __name__ == '__main__': 72 auto = AutoPackage(projectPath="D:/idea/work/api/") 73 # auto = AutoPackage() 74 auto.check() 75 auto.package() 76 pass