os
パッケージのgetcwd()
を使ってカレントディレクトリーを取得しようとして、Atomからの直接実行などのときにうまくいかなかった。
このような場合、__file__
で実行ファイルの位置を得ることができる。また、os.path.dirname(__file__)
でファイル名を除いたパスを、os.path.basename(__file__)
でファイル名のみを得ることができる。
実行方法によってはエラーとなる。
1 2 3 4 5 6 |
import os print("__file__:{}".format(__file__)) print("dirname :{}".format(os.path.dirname(__file__))) print("basename:{}".format(os.path.basename(__file__))) print("files :{}".format(os.listdir(os.path.dirname(__file__)))) |
Atomから実行した場合
1 2 3 4 |
__file__:C:\Users\...\dev\python\packages\os\__file__.py dirname :C:\Users\...\dev\python\packages\os basename:__file__.py files :[..., '__file__.py'] |
コマンドラインから実行ファイル(__file__.py
)のあるディレクトリーに移動し、直接ファイル名をタイプした場合
1 2 3 4 5 |
C:\Users\...\dev\python\packages\os>__file__.py __file__:C:\Users\...\dev\python\packages\os\__file__.py dirname :C:\Users\...\dev\python\packages\os basename:__file__.py files :[..., '__file__.py'] |
コマンドラインから実行ファイル(__file__.py
)のあるディレクトリーに移動し、”python 実行ファイル名”で実行した場合
1 2 3 4 5 6 7 8 |
C:\Users\tomo\...\dev\python\packages\os>python __file__.py __file__:__file__.py dirname : basename:__file__.py Traceback (most recent call last): File "__file__.py", line 6, in <module> print("files :{}".format(os.listdir(os.path.dirname(__file__)))) FileNotFoundError: [WinError 3] 指定されたパスが見つかりません。: '' |
上記と同じだが、実行ファイル名を相対パスで指定した場合
1 2 3 4 5 |
C:\Users\...\dev\python\packages\os>python ./__file__.py __file__:C:\Users\...\dev\python\packages\os\__file__.py dirname :C:\Users\...\dev\python\packages\os basename:__file__.py files :[..., '__file__.py'] |