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.

file1但是不在范围内,因为您已经导入了files,并且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 回答