工做須要,將已經打好的war包解壓出來,從新壓縮WEB-INF中的classes文件夾到WEB-INF.zippython
那就只好從實際出發,用代碼來了解一下python的壓縮解壓縮了。api
#!/usr/bin/env python # encoding: utf-8 """ @version: 1.0 @author: jiangmtiao @site: my.oschina.net/jiangmitiao/blog @software: PyCharm @file: autoPackage.py @time: 2016/3/23 9:42 @description: TODO """ import os import zipfile class AutoPackage(object): def __init__(self, mavenPath="auto", projectPath="./"): self.mavenPath = mavenPath self.projectPath = projectPath self.fileName = None pass def check(self): # 檢查是否有war文件,不存在則退出 tmpPath = os.path.join(self.projectPath, 'target/') if not os.path.exists(tmpPath): print "no target" exit(-1) pass for fn in os.listdir(os.path.join(self.projectPath, 'target/')): if fn.endswith(".war"): self.fileName = fn break pass pass if self.fileName is None: print " no *.war" exit(-1) pass pass def package(self): tmpPath = self.projectPath + 'target/' # 解壓指定的文件 zipFile = zipfile.ZipFile(os.path.join(tmpPath, self.fileName)) for f in zipFile.namelist(): if f.find("classes/com") > 0: zipFile.extract(f, tmpPath) pass pass # 準備壓縮文件 zpfd = zipfile.ZipFile(tmpPath + "/WEB-INF.zip", mode='w') for dirpath, dirnames, filenames in os.walk(tmpPath + "/WEB-INF"): for filename in filenames: #oldFilename是相對路徑或者絕對路徑 oldFilename = os.path.join(dirpath, filename) #zipFileName是打入壓縮包中的文件路徑 zipFileName = dirpath.replace(tmpPath + "/WEB-INF\\", "") + "/" + filename zpfd.write(oldFilename, zipFileName) pass pass zpfd.close() pass if __name__ == '__main__': auto = AutoPackage(projectPath="D:/idea/work/api/") # auto = AutoPackage() auto.check() auto.package() pass
更多文章:http://blog.gavinzh.commaven