0

データベースからの文字列があります。この文字列は、モジュール内にあるファイル .py の名前です。構造は次のとおりです。

files
├── file1.py
├── file2.py
└── __init__.py

file1.py含む:

def file1(imprime):
    print(imprime)

file2.py含む:

def file2(imprime):
    print(imprime)

文字列を呼び出し可能な関数に変換する必要があります。

main.pyファイルで私は試します:

import files
string = "file1.py"
b = getattr(file1, string)

text = 'print this...'

b(text)

誰でも私を助けることができますか?

4

2 に答える 2

0

いくつかの問題があります。このstring場合の は、「.py」ファイル名ではなく、代わりにモジュールまたは関数名であるべきですfile1

file1filesただし、インポートしたため、スコープ内にはありません。file1関数はfiles.file1モジュール内にあります。

files/ init .py で次のように宣言できます。

from file1 import *
from file2 import *

file1関数とfile2関数を に存在させたい場合files。それならあなたはそうするでしょうb = getattr(files, string)

于 2013-04-11T15:48:58.183 に答える
0

インポート機能を使用してモジュールを名前でインポートし、それをファイル モジュールに貼り付けることができます。

編集:関数を呼び出す方法を示す変更

import os
import files
wanted_file = "file1.py"
# name of module plus contained function
wanted_name = os.path.splitext(wanted_file)[0]
# if you do this many times, you can skip the import lookup after the first hit
if not hasattr(files, wanted_name):
    module = __import__('files.' + wanted_name)
    setattr(files, wanted_name, module)
else:
    module = getattr(files, wanted_name)
fctn = getattr(module, wanted_name)
text = 'print this...'
fctn(text)
于 2013-04-11T15:53:13.697 に答える