您的位置:首页 > 编程语言 > Python开发

使用Python合并压缩文件(jar)

2017-01-18 10:17 495 查看
目前遇到了一个需求,就是想把自己的Jar包合并一下,如果很少的文件或目录结构比较浅的话,手动可能会方便一些,但是遇到目录结构比较深(包名很长)的时候并且目录(包名)比较多的时候就很头疼了,所以想写一个合并jar包的python脚本。

1.首先第一步,能够得到所有压缩文件(origin.jar)的文件名的脚本:

import zipfile

zfile = zipfile.ZipFile('origin.jar', 'r')
for filename in zfile.namelist():
    print filename
zfile.close()

2.接下来进行文件提取:

#! /usr/bin/python
import zipfile

zfile = zipfile.ZipFile('origin.jar', 'r')
zfile.extractall()
zfile.close

执行完脚本之后会看到jar包解压的文件

3.将解压的文件写入到目标压缩文件:
    #! /usr/bin/python

    import zipfile
    import os
    import shutil
    

    zfile = zipfile.ZipFile('origin.jar')
    names_zfile = zfile.namelist()

    zfile.extractall()
    zfile.close()

    dstzip = zipfile.ZipFile('dest.jar', 'w')
    for filename in names_zfile:
        dstzip.write(filename)
    dstzip.close()

4.因为解压了文件,所以要删除解压的文件:

    #! /usr/bin/python

    import zipfile
    import os
    import shutil

    zfile = zipfile.ZipFile('origin.jar')
    names_zfile = zfile.namelist()

    zfile.extractall()
    zfile.close()

    dstzip = zipfile.ZipFile('dest.jar', 'w')
    for filename in names_zfile:
        dstzip.write(filename)
    dstzip.close()

    for filename in names_zfile:
        rootPath = filename.split('/')[0];
        if os.path.exists(rootPath):
            shutil.rmtree(rootPath)

到此为止,完成了从压缩文件到另一个压缩文件的写入,接下来进行多个Jar包的文件的合并。
5.合并之前,需要变量下指定的目录,下面的代码可以进行目录下的文件遍历:

jarlist = os.listdir('./')
for file in jarlist:
    print file

这样就可以把每个jar的文件解压并写入到目标jar中,中间可能会过滤下,如果对以上实现不感兴趣,可以直接看下面的代码(最终的实现结果,测试通过):

#! /usr/bin/python

import zipfile
import os
import shutil

def commbinJar(originJar, destzip):
    zfile = zipfile.ZipFile(originJar)
    names_zfile = zfile.namelist()

    zfile.extractall()
    zfile.close()

    for filename in names_zfile:
        destzip.write(filename)

    for filename in names_zfile:
        rootPath = filename.split('/')[0];
        if os.path.exists(rootPath):
            shutil.rmtree(rootPath)

def commbinJars(jarDir, destzipJarName):
    jarlist = os.listdir(jarDir)
    dstzip = zipfile.ZipFile(destzipJarName, 'w')    
    for filename in jarlist:
        print filename
        if filename.endswith(".jar"):
            print filename
            commbinJar(filename, dstzip)
    dstzip.close()

commbinJars("./", "comm.jar")
os.system('pause')

简短解说:

1.commbinJar:这个函数将一个jar的文件写入到目标jar(压缩文件)中

2.commbinJars:将目标目录下的所有jar写入到目标的jar(压缩文件)中

3.commbinJars("./", "comm.jar"):调用时,只需要填写目录(路径)和新的目标Jar名称即可

以上就是合并jar文件的python脚本,也可以根据自己的需求在commbinJar或commbinJars方法里面添加过滤。

注:如果单独是合并Jar的话,可能并不常用或用处不大,但是如果配合可以修改jar中的包名(防止引用相同jar编译冲突),然后合并成一个Jar包,那么可能是个不错的技巧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: