同じディレクトリにあるデータファイルをロードする必要があるため、モジュールがインポートされたディレクトリを見つけるにはどうすればよいですか?
編集:
いくつかの答えを組み合わせる:
module_path = os.path.dirname(imp.find_module(self.__module__)[1])
私が欲しかったものを手に入れた
例としてreモジュールを使用します。
>>> import re
>>> path = re.__file__
>>> print path
C:\python26\lib\re.pyc
>>> import os.path
>>> print os.path.dirname(os.path.abspath(path))
C:\python26\lib
モジュールが現在の作業ディレクトリ( "CWD")にある場合は、相対パスのみを取得することに注意してくださいfoo.py
。モジュールパスが使用される前にCWDが変更された場合に備えて、絶対パスをすぐに取得する習慣を付けています。
実際にモジュールをインポートせずに、つまりmodule_name
文字列として指定してディレクトリをモジュール化したい場合は、使用します
def get_dir(module_name):
import os,imp
(file, pathname, description) = imp.find_module(module_name)
return os.path.dirname(pathname)
print get_dir('os')
出力:
C:\Python26\lib
def foo():
print 'foo'
bar.py
import foo
import os
print os.path.dirname(foo.__file__)
foo.foo()
出力:
C:\Documents and Settings\xxx\My Documents
foo
これはうまくいきます:
yourmodule.__file__
オブジェクトがインポートされたモジュールを見つけたい場合は、次のようにします。
myobject.__module__
モジュールのファイルへのパスはmodule.__file__
. それを使用してos.path.dirname
、ディレクトリを取得できます。