我正在运行一个名为test.py的python文件。我在名为Model的同一目录中有一个文件夹。在模型内部我有几个其他文件夹(如UserMgmt,GPO,DNS等),每个文件夹包含不同的python程序。现在,我想根据用户选择从UserMgmt或DNS或GPO文件夹运行python程序。我试过了..
foldername = raw_input('Enter foldername:');
filename = raw_input('Enter filename:');
from Model.foldername import filename;
但它显示错误'无效语法'。我必须导入python文件,因为我将使用这些文件中的变量和函数。但是python文件和文件的路径取决于用户。如何在这种情况下导入python文件? 请帮忙... 提前谢谢。
答案 0 :(得分:1)
您可以使用importlib或imp模块
importlib可以相对于当前目录导入一些模块
import importlib
# foldername need to be in same dir with this script
foldername = raw_input('Enter foldername:')
# enter filename without .py for this case
filename = raw_input('Enter filename:')
test = importlib.import_module(foldername + '.' + filename)
# for example, foldername = 'GPO', filename = 'test'
# this will import GPO\test.py
如果您想从任意路径导入某个文件,可以使用imp模块
import imp
import os
# foldername can be from anywhere
foldername = raw_input('Enter foldername:')
# enter filename with .py for this case
filename = raw_input('Enter filename:')
test = imp.load_source(filename ,os.path.join(foldername, filename))
# for example, foldername = r'C:\NGO', filename = 'test.py'
答案 1 :(得分:0)
您不能使用此语法的变量。
在您的代码中,您实际上是从foldername模块导入文件名。
尝试使用以下代码:
exec("from Model.{} import {}".format(foldername, filename))
答案 2 :(得分:0)
在动态导入方面,importlib.import_module()
是您的朋友。但是如果你只想根据它的路径执行给定的python 脚本,你只需使用os.system()
或execfile()
。
答案 3 :(得分:-1)
尝试使用__import__()
,如果使用python2.7 +或3.1+,最好使用exec
。