[Python] 合并工作空间代码 (含打包成EXE程序)

(我转载我自己的 : ) )

为什么要做这个脚本

最近这几天在外面出差,因为之前工作的SVN是内网环境的,所以在外面(成都)无法通过SVN合并代码。
没办法,只能手动合并了。我们通过在本地电脑上,将修改的代码打包,然后通过微信发给其他同事。
But,问题来了,Java的代码需要放到对应的包下面的,如果通过微信发送过去,那么做合并的时候就要知道每一个Java文件的包路径。这样太麻烦了,SO,我就用Python来解决这个问题。

优秀的Coder,善于用计算机偷懒!

程序流程 (Python风格的流程哦)

  1. 读取配置文件 (因为要给其他同事用,所以修改配置文件必修改代码要方便)
  2. 遍历源代码路径下的所有Java文件:
    1. 获取当前遍历的Java文件的完整路径
    2. 获取当前遍历的Java文件在目标路径下的路径(通过包名哦)
    3. 用源文件替换目标文件

配置信息

我们采用JSON格式保存数据,这样做虽然书写起来麻烦,但是读取方便(因为可以直接使用JSON包读取)
记得把注释(#号开头的部分)去掉

{
    "target": {
        "path": "E:\\Code\\Path" # 目标文件路径,即被覆盖的位置,旧的代码的路径
    },
    "source": {
        "path": ".\\source" # 源文件路径,即新的代码的路径
    }
}

代码

代码最好在Windows下使用,而且要Python3.x的环境,且不需要第三方包库

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os, json

# 获取配置信息函数
def getConfig():
    with open('main.conf', 'r', encoding='gbk') as f:
        return json.load(f)

# 读取配置信息
CONFIG = getConfig()

# 获取目标路径函数
def getTargetPath(sfile):
    # 这里的encoding指定GBK是因为我们的Java代码的字符编码是GBK
    with open(sfile, 'r', encoding='gbk') as f:
        # 读取文件内容
        lines = f.readlines()
        # 遍历每一行内容
        for line in lines:
            # 去除两端的空白符并将字母转换为小写
            line = line.strip().lower()
            # 除了以'package'开头的内容,其他的全部跳过
            # 因为Java中package后面的是该类的包名,所以读取包名即可知道这篇代码的目标路径
            if line.startswith('package'):
                # 截取包名部分,并去除两端的空白符
                packageName = line[7:-1].strip()
                # 拼接出完整的目标路径
                return os.path.join(
                    # 读取配置信息中的目标文件的根路径
                    CONFIG['target']['path'],
                    # 包名转换为路径
                    packageName.replace('.', os.sep),
                    # 截取文件名
                    os.path.split(sfile)[-1]
                )


# 程序主入口
def main():
    # 遍历全部的源文件
    for path in os.listdir(CONFIG['source']['path']):
        # 如果是Java文件,则执行替换的流程
        if os.path.splitext(path)[-1] == '.java':
            # 获取当前遍历的Java文件的完整路径
            source = os.path.join(CONFIG['source']['path'], path)
            # 获取当前遍历的Java文件的目标路径
            target = getTargetPath(source)
            # 替换文件
            os.replace(source, target)

# 执行主函数
main()
# 不打包的话,可以解开下面的注释
# 这样,当报出异常时,就不会闪退了
# if __name__ == '__main__':
#     os.system('pause')

将代码打包成EXE

这里是通过PyInstaller 3.4打包的,其他版本不清楚是否适用,下面是打包的命令:

pyinstaller -F MergeCode.py -n MergeCode --icon="icon.ico"

命令解释:

-F 指定代码的主入口,这里就只有一个Python源代码文件,所以直接指定这个代码文件即可
-n 指定打包后的EXE程序的名称
–icon 指定图标的路径

猜你喜欢

转载自blog.csdn.net/qq_17005203/article/details/83793516