pythonカスタム関数§03:ScriptPath() pythonファイルのスクリプト名、フルパス名、ディレクトリ名を取得

Pythonをもっと便利にしよう!

カスタム関数シリーズでは、便利なオリジナル関数を紹介しています。

※カスタム関数は、一般的には「ユーザー定義関数」と呼ばれています

スクリプト名を取得する sys.argv[0]

pythonのスクリプト名を取得する方法は、sysライブラリーのargvを使います。

スクリプト名とか取得して何に利用できるかピンと来ないかもしれませんが

  • バッチファイルを自動生成する
  • スクリプトファイルのあるフォルダの下にいろいろフォルダを作りたい
  • フルパスで自動実行できるバッチファイルを別のドライブやフォルダに集約する

などの活用方法があります。まだまだ、「ポカーン」という状態かもしれませんね。バッチファイルの自動生成の記事を見て、活用方法を理解していただければと思います。

パス名操作をするためにosラブラリーもインポートしておきます。

import sys
import os
def ScriptPath():
    # ■## ScriptPath():   スクリプトパスを取得
    #ScriptPath()[0]:basename ScriptPath()[1]:pathname ScriptPath()[2]:fulpath  
    basename=os.path.basename((sys.argv[0]))
    pathname=os.path.abspath(os.path.dirname(sys.argv[0]))
    fullpath=os.path.join(pathname,basename)
    return (basename,fullpath,pathname)

解説してきましょう。

basename=os.path.basename((sys.argv[0]))

sys.argvは、pythonを実行するときの引数を格納していますが、sys.argv[0]だけは、特別でスクリプトファイルの存在するフルパスを格納することになっています。

この文では、os.path.basenameによって、ベース名(ファイル名だけ)を取り出しています。

fullpath=sys.argv[0]

ここでは、sys.argv[0]そのものですから、フルパスを取得することができます。

pathname=os.path.abspath(os.path.dirname(sys.argv[0]))

次にディレクトリー名を取り出します。

return (basename,fullpath,pathname)

これで、スクリプトファイル名、フルパス名、ディレクトリー名をタプルで返す関数ができあがりです。

ScriptPath()関数の使い方

import sys
import os
def ScriptPath():
    # ■## ScriptPath():   スクリプトパスを取得
    #ScriptPath()[0]:basename ScriptPath()[1]:pathname ScriptPath()[2]:fulpath  
    basename=os.path.basename((sys.argv[0]))
    fullpath=sys.argv[0]
    pathname=os.path.abspath(os.path.dirname(sys.argv[0]))
    return (basename,fullpath,pathname)

if __name__ == "__main__":
    base=ScriptPath()[0]
    fullpath=ScriptPath()[1]
    dirname=ScriptPath()[2]
    
    print('=======================================')
    s="ファイル名のみ   :   {}".format(base)
    print(s)

    s="パス付ファイル名    :   {}".format(fullpath)
    print(s)

    s="ディレクトリー名  :   {}".format(dirname)
    print(s)
    print('=======================================')
    
    a=input('Enterキーを押すと終了します')

 

この関数が戻り値がタプルとなっており

    base=ScriptPath()[0]
    fullpath=ScriptPath()[1]
    dirname=ScriptPath()[2]

関数名()[0]のようにタプルの順番を指定すれば、値を取り出すことができます。

実行結果を次に示しますが、例ではPythonファイルをDドライブのD:\tmp\python_codeにおいています。

【出力結果】
=======================================
ファイル名のみ   :   J808_バッチファイル自動生成.py
パス付ファイル名    :   D:\tmp\python_code\J808_バッチファイル自動生成.py
ディレクトリー名  :   D:\tmp\python_code
=======================================
Enterキーを押すと終了します

 

※ここでは、スクリプト名、フルパス、ディレクトリー名をformat関数を使って、少し整形しているのがわかります。format()関数については、こちらで詳しく紹介しています→

format() はprint()と組み合わせてよく使う

 

 

コメント