1. 程式人生 > >[Python] 合併工作空間程式碼 (含打包成EXE程式)

[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 指定圖示的路徑