pyhton檔案壓縮
import os,os.path
import zipfile
import configparser
import win32process
import win32event
#zip file
def zip_updatepkg(dirname, zipfilename):
filelist = []
if os.path.isfile(dirname):
filelist.append(dirname)
else :
for root, dirs, files in os.walk(dirname):
for name in files:
filelist.append(os.path.join(root, name))
zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED)
for tar in filelist:
arcname = tar[len(dirname):]
#print arcname
zf.write(tar,arcname)
zf.close()
#copy file
def copyfile(sourceFile, targetFile):
if os.path.exists(targetFile) is True:
os.remove(targetFile)
open(targetFile, "wb").write(open(sourceFile, "rb").read())
#copy dir
def copyFiles(sourceDir, targetDir):
if sourceDir.find(".svn") > :
return
for file in os.listdir(sourceDir):
sourceFile = os.path.join(sourceDir, file)
targetFile = os.path.join(targetDir, file)
if os.path.isfile(sourceFile):
if not os.path.exists(targetDir):
os.makedirs(targetDir)
copyfile(sourceFile, targetFile)
if os.path.isdir(sourceFile):
First_Directory = False
copyFiles(sourceFile, targetFile)
#generate update pkg, flag: 209 or p2nhz
def generate_updatepkg(release_path, zip_path, installpkg_path, flag, version):
configFilePath = release_path + r'constsettings_' + flag + r'.ini'
print(configFilePath)
#read config
config = configparser.ConfigParser()
config.read(configFilePath)
#config.add_section('AppInfo')
config.set('AppInfo', 'version', version)
#save config
cfg = open(configFilePath, 'w')
config.write(cfg)
cfg.close()
copyfile(configFilePath, installpkg_path + r'constsettings.ini')
copyfile(configFilePath, release_path + r'constsettings.ini')
zip_updatepkg(installpkg_path, zip_path + r'updatepkg_' + flag + r'_' + version + r'.zip')
#build inno setup
currpath = os.path.dirname(__file__)
innosetup_path = r'D:\\Program Files (x86)\\Inno Setup 5\\Compil32.exe'
innosetup_script = os.path.abspath(currpath + r'\\****.iss')
print(innosetup_script)
handle = win32process.CreateProcess(innosetup_path, " /cc \"" + innosetup_script + "\""
, None, None, , win32process.CREATE_NO_WINDOW, None, None, win32process.STARTUPINFO())
win32event.WaitForSingleObject(handle[], )
setup_name = r'hzxf_client_setup_' + flag + r'.exe'
copyfile(currpath + r'/Output/****_setup.exe', zip_path + setup_name)
if __name__ == '__main__':
currpath = os.path.dirname(__file__)
release_path = os.path.join(currpath, r'../bin/release/')
release_path = os.path.abspath(release_path) + r'\\'
#version tag path
zip_path = os.path.join(currpath, r'../../../tags/pc-client/2.0.6/2.0.6.9963-20160705/')
zip_path = os.path.abspath(zip_path) + r'\\'
if os.path.exists(zip_path) is False :
os.makedirs(zip_path)
#installpkg path
installpkg_path = zip_path + r'install_pkg/'
if os.path.exists(installpkg_path) is False :
os.makedirs(installpkg_path)
#copy files to installpkg_path for compress zip
print(r'----------------------------------------')
images_path = release_path + r'Images/'
copyFiles(images_path, installpkg_path + r'Images/')
#copyfile(release_path + r'constsettings.ini', installpkg_path + r'constsettings.ini')
copyfile(release_path + r'hello.exe', installpkg_path + r'hello.exe')
#build and zip to zip_path for different version
generate_updatepkg(release_path, zip_path, installpkg_path, r'209', '12')
generate_updatepkg(release_path, zip_path, installpkg_path, r'202', '5')