【Python Tips】スクリプトを制作作業フォルダーに置いたまま実行する為に「実行ディレクトリを絶対パスで取得」し「移動」する方法
ナカジ(@cp_nakajun)です。
今もまだ学習初期段階ですが
Pythonでスクリプトを書き、「実行」となった時のことです。
とりあえずテキストエディターでスクリプトを書きます。
そのファイルは(僕の場合デスクトップなどの)任意のフォルダー内に保存しながら作業してます。と…
で、通常であれば「実行」する為にターミナル等を起動し
python /dir-name/dir-name/dir-name/file-name.py
とすればよいのですが
(僕の場合は)エクセルからデータを取得しPythonで操作しようとしたところ
そのエクセルファイルをPythonの実行ディレクトリに置いておかないとエラーになるという状況に出会いました。
スクリプトとデータのファイルは同一フォルダに置いて管理したい。
他にも良い方法があるのかもしれませんが、それは不便なのでスクリプト毎に実行フォルダーを移動して対応することにしました。
実行ディレクトリを絶対パスで取得し移動する
Pythonの標準ライブラリ「os」の「path」関数を利用します。
詳細はPythonの公式ドキュメント
https://docs.python.jp/3/library/os.path.html
先ず最初に「os」ライブラリを利用する為にインポートします。
import os
Python カレントディレクトリの確認
今いるカレントディレクトリ(実行ディレクトリ)を確認します。
os.getcwd()
先のケースで言うと、ここで出てきたディレクトリにファイルを置いておかないといけない訳です。
Python 絶対パスを取得
[__file__]を用いると「スクリプトへの相対パス」を取得できます。
os.path.abspath()を使って絶対パスを取得します。
[os.path.abspath()]:パス名 path の正規化された絶対パスを返します。
os.path.abspath(__file__)
次に
os.path.dirname()の引数をスクリプトへの絶対パスにすることで「スクリプトのあるディレクトリの絶対パス」を取得することができます。
[os.path.dirname()]:パス名 path のディレクトリ名を返します。
os.path.dirname(os.path.abspath(__file__))
Python スクリプトファイルのあるディレクトリに移動
os.chdir()で移動します。
[os.chdir()]:現在の作業ディレクトリを設定します。
os.chdir(os.path.dirname(os.path.abspath(__file__)))
まとめ
スクリプトに以下のように記述しておくことで
スクリプトが置いてあるフォルダーを実行ディレクトリとすることができます。
import os os.chdir(os.path.dirname(os.path.abspath(__file__)))