😸

※編集中【Python入門】__file__ とは?

に公開

file (アンダースコア・アンダースコア・ファイル・アンダースコア・アンダースコア) は、Pythonにおいて現在実行されているモジュール(ファイル)のパスを保持している組み込みの変数です。

これは、Pythonの特殊な変数の一つで、ファイルの場所をプログラム内で特定するために非常に重要です。

file の役割と取得する値

  1. 取得する値
    file が保持する値は、通常、スクリプトファイル自身のパスを文字列として保持しています。

スクリプトとして実行された場合:

そのファイルへのパス(相対パスまたは絶対パス)が格納されます。

例: 'server/server.py' や '/home/user/project/server.py'

モジュールとしてインポートされた場合:

インポートされたモジュール(.pyファイル)の場所へのパスが格納されます。

  1. なぜ重要なのか?
    file が重要なのは、プログラムがどこから実行されたかにかかわらず、自身の場所を基準にしたファイル操作を可能にするからです。

例えば、設定ファイルやリソースファイル(画像、データファイルなど)がスクリプトと同じディレクトリ、または特定の相対的な場所にある場合、file を起点とすることで、パスを絶対的に特定できます。

例: file を使って、スクリプトと同じディレクトリにある data.txt を開く場合

file (アンダースコア・アンダースコア・ファイル・アンダースコア・アンダースコア) は、Pythonにおいて現在実行されているモジュール(ファイル)のパスを保持している組み込みの変数です。

これは、Pythonの特殊な変数の一つで、ファイルの場所をプログラム内で特定するために非常に重要です。

💡 file の役割と取得する値

  1. 取得する値
    file が保持する値は、通常、スクリプトファイル自身のパスを文字列として保持しています。

スクリプトとして実行された場合:

そのファイルへのパス(相対パスまたは絶対パス)が格納されます。

例: 'server/server.py' や '/home/user/project/server.py'

モジュールとしてインポートされた場合:

インポートされたモジュール(.pyファイル)の場所へのパスが格納されます。

  1. なぜ重要なのか?
    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