2

同じディレクトリにあるデータファイルをロードする必要があるため、モジュールがインポートされたディレクトリを見つけるにはどうすればよいですか?

編集:

いくつかの答えを組み合わせる:

module_path = os.path.dirname(imp.find_module(self.__module__)[1])

私が欲しかったものを手に入れた

4

4 に答える 4

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が変更された場合に備えて、絶対パスをすぐに取得する習慣を付けています。

于 2010-03-10T13:48:03.367 に答える
1

実際にモジュールをインポートせずに、つまり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


foo.py

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
于 2010-03-10T13:50:59.620 に答える
1

これはうまくいきます:

yourmodule.__file__

オブジェクトがインポートされたモジュールを見つけたい場合は、次のようにします。

myobject.__module__
于 2010-03-10T13:37:22.917 に答える
1

モジュールのファイルへのパスはmodule.__file__. それを使用してos.path.dirname、ディレクトリを取得できます。

于 2010-03-10T13:37:29.167 に答える