Pythonで実行中のスクリプトのパスを取得する: __file__, os.path.abspath, os.path.dirname, os.path.basename
- 作成日: 2021-07-20
- 更新日: 2023-12-26
- カテゴリ: Python
Pythonでパスを取得する
Pythonの実行中のスクリプト内で、スクリプト・ファイルのパスを取得する方法を解説します。
パスの取得には__file__
やos.path.abspath()
, os.path.dirname()
やos.path.basename()
などを使います。
結論から言うとパスの取得は↓のようにやります。
import os
print(__file__) # スクリプトのパスを参照
# /to/getpath/intro.py
print(os.path.abspath(__file__)) # 絶対パスを取得
# /to/getpath/intro.py
print(os.path.dirname(os.path.abspath(__file__))) # 絶対パスでディレクトリを取得
# /to/getpath
print(os.path.basename(__file__)) # ファイル名を取得
# intro.py
スクリプトの存在するディレクトリ内になにかファイルやディレクトリを作ってごにょごにょしたいという場合に、こういったパスの取得が必要になることがあります。
基本的にはos.path.abspath()
とos.path.dirname()
を組み合わせればスクリプトの存在するディレクトリは取得できます。
この記事では具体的にパスの取得について↓を見ていきます。
__file__
について- 絶対パスの取得:
os.path.abspath
- ディレクトリの取得:
os.path.dirname
- ファイル名の取得:
os.path.basename
関連記事
Pythonのpathlibの今時な使い方
Pythonのbasenameの使い方: パスのファイル名部分を抽出する
Pythonでパスからファイル名を取得する【os.path.basename】
Pythonのglobの賢い使い方【パス収集】
`__file__`について
__file__
とはPythonが持つ特殊変数の1つです。
この変数には現在実行中のスクリプト・ファイルのパスが保存されます。
たとえば/to/getpath/file.py
というスクリプトを作ります。
スクリプトの中身は↓です。
print(__file__)
このスクリプト・ファイルを実行すると↓のような結果になります。
$ python file.py
/to/getpath/file.py
__file__
はスクリプト・ファイルのパスや、スクリプトの存在するディレクトリを取得したいときに参照されることが多いです。
絶対パスの取得: `os.path.abspath`
絶対パスの取得には__file__
とos.path.abspath
を組み合わせます。
import os
print(os.path.abspath(__file__))
# /to/getpath/abspath.py
os.path.abspath()
は引数のパスを絶対パスにする関数です。
__file__
はすでに絶対パスなんだからabspath()
に渡す必要はないのでは?
はい。そうかもしれませんが、念のためabspath()
に渡しておきましょう。
↓はabspath()
が相対パスを絶対パスに変換する風景です。
print(os.path.abspath('.'))
# /to/getpath
print(os.path.abspath('./script.py'))
# /to/getpath/script.py
↑の結果は/to/getpath/
以下でスクリプトを実行したときに得られます。
script.py
は存在しないファイル名ですが、abspath()
はそんなことは気にしません。
ディレクトリ名の取得: `os.path.dirname`
ディレクトリ名を取得したい場合はos.path.dirname()
を使います。
import os
print(os.path.dirname(__file__))
# /to/getpath
__file__
から絶対パスを取得し、そこからdirname()
でディレクトリ名を取得する処理は、定型文のようによく使われます。
覚えておいて損はないでしょう。
print(os.path.dirname(os.path.abspath(__file__)))
# /to/getpath
たとえば↑の方法でディレクトリ名を取得して、sys.path
にパスを挿入するという処理もよく行われます。
import os, sys
sys.path.insert(os.path.dirname(os.path.abspath(__file__)))
↑のようにするとスクリプトのあるディレクトリ内のファイルがインポートできるようになります。
ファイル名の取得: `os.path.basename`
パスのファイル名部分を取得するにはos.path.basename()
を使います。
os.path.basename --- 共通のパス名操作 — Python 3.9.4 ドキュメント
関連記事
Pythonでパスからファイル名を取得する【os.path.basename】
__file__
のファイル名部分を取得する場合は↓です。
import os
print(os.path.basename(__file__))
# basename.py
おわりに
今回はPythonでスクリプト・ファイルのパスを取得する方法を見てみました。
意外にけっこう使う処理かもしれません。
🦝 < パスを取得しますか?
🐭 < パス!(Pass)