心魅 - cocoromi -

半角スペース時々全角

pythonでソースファイルの絶対パスを取得する

注:python 2.6で動作確認しました。


pythonの事は良くわからない。だからどんなことでもメモしていく。


参考文献:6.2 os.path --
共通のパス名操作


アプリケーションを作っていると、とあるファイルからの相対パスで指定したくなることと言うのが良くある。
だから、良くアプリの設定にアプリケーションルートを設定したりするところがある。


でも、俺はそういうめんどくさいことはしたくない!!!!


良いじゃないか、設定ファイルがあるところそこがルートなんだよ!がたがた文句言うんじゃねぇ!


っというわけで、自動的にあるファイルの絶対パスを取得したりしたいんですよ?

pathモジュール

pythonにはos.pathという糞便利なモジュールがあってこいつと__file__という特殊な変数を使うとそのファイルが置いてあるディレクトリの絶対パスが取得できます。

きっと設定ファイルはconfとかいうディレクトリに入ってるからルートはその親だよね。

from os import path
APP_ROOT = path.dirname( path.abspath( __file__ ) ) + "../"

実際に使ったところ

djangoのMEDIA_ROOTって、サンプルとかチュートリアルとか読むと、絶対パスで書いてあるんだけど、それがすごく気持ち悪い。
良いジャンプロジェクトのなかのディレクトリで良いジャン?!


そんなわけでこんなコードになる。

 36 # Absolute path to the directory that holds media.
 37 # Example: "/home/media/media.lawrence.com/"
 38 from os import path
 39 MEDIA_ROOT = path.dirname( path.abspath( __file__ ) ) + "media"

pathモジュールの他のメソッド

関数なの?メソッドなの?


調べたついでにpathモジュールの便利そうなメソッドをメモする


他のが知りたかったら6.2 os.path --
共通のパス名操作
をみる。

abspath( SOME_PATH )

@return 文字列
引数に突っ込んだパスを絶対パスに変換してくれる。

dirname( SOME_PATH )

@return 文字列
引数に突っ込んだパスをディレクトリまでのパスに変換してくれる。
abspathとのコンボでよく使いそう。
絶対覚えたい。

exists( SOME_PATH )

@return 真偽値
SOME_PATHで表されるパスが存在するかどうか確かめる。

basename( SOME_PATH )

@return 文字列
SOME_PATHからファイル名の部分を抜き出してくる。
なにこれすごい。


Pythonのライブラリリファレンスってなんで戻り値の型が書いてないの?


まとめ

ファイルのパスに関する操作をしたかったらos.path。
男は黙って、from os import path。たぶん。


なんかすごいまずい間違があったら誰か突っ込んで。