[python]ワークスペースコードのマージ(EXEプログラムへのパッケージを含む)

10247 ワード

(私は自分の:)を転載します.
なぜこのシナリオを作るのか
ここ数日、外で出張していますが、前に働いていたSVNはイントラネット環境なので、外(成都)ではSVNでコードをマージできません.仕方なく、手動で統合するしかありません.私たちはローカルコンピュータで、修正したコードをパッケージ化し、他の同僚に微信で送ります.But、問題が来て、Javaのコードは対応するパッケージの下に置く必要があります.微信で送信すれば、統合するときはJavaファイルごとのパッケージパスを知る必要があります.これは面倒ですね.SO、Pythonでこの問題を解決します.
優秀なコダー、コンピューターでサボるのが上手!
プログラムフロー(Python風のフローですよ)
  • プロファイルを読み込む(他の同僚に使うため、プロファイルを修正するにはコードを修正する必要があるので便利)
  • .
  • ソース・パスの下にあるすべてのJavaファイルを巡回します.
  • 現在遍歴しているJavaファイルのフルパスを取得
  • 現在遍歴しているJavaファイルの宛先パスの下のパス(パッケージ名を介して)
  • を取得
  • ターゲットファイル
  • をソースファイルに置き換える.

    構成情報
    私たちはJSON形式でデータを保存しています.これは書くのが面倒ですが、読みやすい(JSONパッケージで直接読むことができるので)注釈(#番号の先頭の部分)を外してください.
    {
        "target": {
            "path": "E:\\Code\\Path" #       ,       ,       
        },
        "source": {
            "path": ".\\source" #      ,        
        }
    }
    
    

    コード#コード#
    コードはWindowsの下で使うのが一番いいし、Python 3も必要です.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ソースファイルが1つしかありません.このコードファイルを直接指定すればいいです.-nパッケージされたEXEプログラムの名前を指定します.-iconアイコンのパスを指定します.
    ソース+EXEプログラム
    ここをクリックしてダウンロードページにジャンプ