※編集中【Python入門】__file__ とは?
file (アンダースコア・アンダースコア・ファイル・アンダースコア・アンダースコア) は、Pythonにおいて現在実行されているモジュール(ファイル)のパスを保持している組み込みの変数です。
これは、Pythonの特殊な変数の一つで、ファイルの場所をプログラム内で特定するために非常に重要です。
file の役割と取得する値
- 取得する値
file が保持する値は、通常、スクリプトファイル自身のパスを文字列として保持しています。
スクリプトとして実行された場合:
そのファイルへのパス(相対パスまたは絶対パス)が格納されます。
例: 'server/server.py' や '/home/user/project/server.py'
モジュールとしてインポートされた場合:
インポートされたモジュール(.pyファイル)の場所へのパスが格納されます。
- なぜ重要なのか?
file が重要なのは、プログラムがどこから実行されたかにかかわらず、自身の場所を基準にしたファイル操作を可能にするからです。
例えば、設定ファイルやリソースファイル(画像、データファイルなど)がスクリプトと同じディレクトリ、または特定の相対的な場所にある場合、file を起点とすることで、パスを絶対的に特定できます。
例: file を使って、スクリプトと同じディレクトリにある data.txt を開く場合
file (アンダースコア・アンダースコア・ファイル・アンダースコア・アンダースコア) は、Pythonにおいて現在実行されているモジュール(ファイル)のパスを保持している組み込みの変数です。
これは、Pythonの特殊な変数の一つで、ファイルの場所をプログラム内で特定するために非常に重要です。
💡 file の役割と取得する値
- 取得する値
file が保持する値は、通常、スクリプトファイル自身のパスを文字列として保持しています。
スクリプトとして実行された場合:
そのファイルへのパス(相対パスまたは絶対パス)が格納されます。
例: 'server/server.py' や '/home/user/project/server.py'
モジュールとしてインポートされた場合:
インポートされたモジュール(.pyファイル)の場所へのパスが格納されます。
- なぜ重要なのか?
file が重要なのは、プログラムがどこから実行されたかにかかわらず、自身の場所を基準にしたファイル操作を可能にするからです。
例えば、設定ファイルやリソースファイル(画像、データファイルなど)がスクリプトと同じディレクトリ、または特定の相対的な場所にある場合、file を起点とすることで、パスを絶対的に特定できます。
例: file を使って、スクリプトと同じディレクトリにある data.txt を開く場合
Python
import os
# 1. 実行中のファイルの絶対パスを取得
current_file_path = os.path.abspath(__file__)
# 2. ファイル名を除いたディレクトリのパスを取得
current_dir = os.path.dirname(current_file_path)
# 3. 同じディレクトリ内のファイルを結合
data_file_path = os.path.join(current_dir, 'data.txt')
print(f"データファイルのパス: {data_file_path}")
3. 注意点
インタラクティブシェルやIDLE: Pythonのインタラクティブシェル(Python対話モード)で直接 file を参照しようとすると、ファイルが存在しないため NameError が発生します。
絶対パスではない場合がある: 環境によっては、file が相対パスを返すことがあります。そのため、前の解説で見たように os.path.abspath(file) と組み合わせて、常に絶対パスに変換してから使うことが推奨されます。
Path(__file__) が基準にする場所
| 要素 | 意味 | 基準にする場所 |
|---|---|---|
__file__ |
現在実行されているスクリプトファイルのパス | スクリプトファイル自身の場所 |
| .parent | Pathオブジェクトが示すディレクトリの一つ上の階層 | 常に __file__ からの相対的な位置 |
| カレントディレクトリ (CWD) | ユーザーがターミナルで python script.py と入力したときの、そのターミナルが今いる場所 | ユーザーの実行環境によって変動する |
Discussion