我有一个来自数据库的字符串。此字符串是模块中文件.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)
任何人都可以帮助我吗?
答案 0 :(得分:0)
有几个问题。在这种情况下,string
不应该是“.py”文件名,而应该是模块或函数名称,因此file1
。
file1
不在范围内,因为您已导入files
,而file1
该功能位于files.file1
模块内。
您可以将文件/ init .py声明如下:
from file1 import *
from file2 import *
如果您希望file1
功能和file2
功能存在于files
上。然后你会做b = getattr(files, string)
。
答案 1 :(得分: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)