天天看點

python檔案壓縮

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')