3

私はPython 2.7でこのようなデータ構造を持っています

myfile.py
--parsers
  --folder1
    file1.py
         def filemethod(data=None)
            pass

フォルダーパーサーの下に、多くのサブフォルダーを追加できます

ただし、呼び出したい関数の名前は常にわかります

各サブディレクトリでメソッドを見つけ、myfile.py からアクセスできるようにするには、パーサー ディレクトリをインポートする方法を教えてください。getattr を使用して、名前を関数オブジェクトに変換します。これは、redis キューへのリモート呼び出しから呼び出す関数の名前を取得するために必要です。

import ??????
methodToCall = getattr('filemethod', 'file1')
methodToCall(data)
4

2 に答える 2

4

動的インポートを行う良い方法は、以下を使用することimp.load_source()です:

import imp
module = imp.load_source( 'mymodule', module_full_path )

あなたの場合、それは次のようになります:

module = imp.load_source( 'file1', '.\parsers\file1.py')
methodToCall = getattr( module, 'filemethod' )
methodToCall( data )

とを目的のモジュール名とそのソース ファイルへの正しいパスに置き換え'file1'てください。'.\parsers\file1.py'

于 2013-06-15T06:44:04.843 に答える
0

もう 1 つの方法は、最初に からサブディレクトリをインポートすることparsers/__init__.pyです。

parsers/__init__.py:

import folder1
import folder2
...

それから:

import parsers
foldername = 'folder1'  # for example
mod = getattr(parsers, foldername)
methodToCall = getattr(mod, 'filemethod')
methodToCall(data)
于 2013-06-15T06:46:30.453 に答える