如何将变量的值传递给python中的import语句
Posted
技术标签:
【中文标题】如何将变量的值传递给python中的import语句【英文标题】:how to pass value of a variable to import statement in python 【发布时间】:2012-11-18 11:42:04 【问题描述】:我对 python 真的很陌生。 我正在使用 python 我必须导入一个我一开始不知道名称的文件。实际上我必须通过命令提示符传递文件的名称,现在我已经读取了名称并存储在变量中,但我不知道如何将它传递给 import 语句。我正在尝试代码
str = sys.argv[lastIndex]
from "%s" import *,str
但它给出了错误
File "IngestDataToMongo.py", line 86
from "%s" import *,str
^
SyntaxError: invalid syntax
那么怎么做呢。 python
【问题讨论】:
你应该参考动态模块导入***.com/questions/301134/… 【参考方案1】:您可以改用__import__()
函数来导入模块。它接受变量作为参数。
但首先,请确保您确实需要该功能 - 90% 的时间人们并不真正需要该功能。
【讨论】:
我认为它更像是 99%。 @sberry: 也许吧,但元类在 99% 的情况下人们并不需要,而且我认为__import__()
对更多的人真的有用,所以我选择了 90%而不是 99% ;) 无论如何,它背后没有真正的数据。
83% 的统计数据是现场制作的。
@Johnsyweb:是的,我们明白了 :) 很高兴您在讨论中介绍了一些真实数据;)【参考方案2】:
你应该使用importlib模块
import importlib
mdl = 'urllib'
your_module = importlib.import_module(mdl)
your_module.quote
>>> <function urllib.quote>
编辑
感谢Tadeck - 这确实适用于 python 2.7 和 3.1+
【讨论】:
一个重要的提示:importlib
在 Python 功能更全包中可用功能的一小部分来自 Python 3.1 的同名" (source)。
@Tadeck 看到你的评论我必须编辑我的问题,因为我必须使用 python 2.6【参考方案3】:
如果您不想导入 importlib
模块,可以这样做:
import sys
s = sys.argv[lastIndex]
def is_save(s):
#test if s is a valid argument
return True or False
if is_save(s):
exec('from %s import *'%s)
注意:exec
(或eval
)的用法是potentially dangerous,因此需要is_save
函数以避免滥用脚本。
【讨论】:
嘿伙计,你太棒了,这工作完美,而且只有 1 行代码。万分感谢你。我现在是你的粉丝了。 如果导入的参数可能不安全(即来自您可能不信任的用户),我不推荐此版本。通常应该避免使用exec
和eval
,因为很难确保传递给这些函数的字符串是正常的。绝对推荐使用importlib
或__import__
。
@DavidZwicker 我同意你的观点,并修改了答案以避免传递潜在的疯狂字符串。以上是关于如何将变量的值传递给python中的import语句的主要内容,如果未能解决你的问题,请参考以下文章