同じディレクトリで、現在実行中のファイルだけでなく、他のファイルの絶対パスを見つけたい場合に備えて、一般的なアプローチは次のようになります。
import sys,os
pathname = os.path.dirname(sys.argv[0])
fullpath = os.path.abspath(pathname)
for root, dirs, files in os.walk(fullpath):
for name in files:
name = str(name)
name = os.path.realpath(os.path.join(root,name))
print name
__file__
他の人が言及しているように、属性を利用できます。この属性を使用し__file__
て、現在読み込まれている Python モジュールに関連するいくつかの異なるパスを返すことができます (別の StackOverflow answerからコピーされます)。
モジュールが Python にロードされると、ファイルはその名前に設定されます。その後、それを他の関数で使用して、ファイルが配置されているディレクトリを見つけることができます。
# The parent directory of the directory where program resides.
print os.path.join(os.path.dirname(__file__), '..')
# The canonicalised (?) directory where the program resides.
print os.path.dirname(os.path.realpath(__file__))
# The absolute path of the directory where the program resides.
print os.path.abspath(os.path.dirname(__file__))
ロードしているモジュールがどこから来たのか注意してください。属性の内容に影響を与える可能性があります ( Python 3 Data model documentation__file__
からコピー):
__file__
モジュールがファイルからロードされた場合、モジュールがロードされたファイルのパス名です。インタープリターに静的にリンクされている C モジュールなど、特定のタイプのモジュールでは属性が欠落している可能性があります__file__
。共有ライブラリから動的にロードされる拡張モジュールの場合、これは共有ライブラリ ファイルのパス名です。