如何将变量的值传递给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 行代码。万分感谢你。我现在是你的粉丝了。 如果导入的参数可能不安全(即来自您可能不信任的用户),我不推荐此版本。通常应该避免使用execeval,因为很难确保传递给这些函数的字符串是正常的。绝对推荐使用importlib__import__ @DavidZwicker 我同意你的观点,并修改了答案以避免传递潜在的疯狂字符串。

以上是关于如何将变量的值传递给python中的import语句的主要内容,如果未能解决你的问题,请参考以下文章

如何将awk中一个变量的值传递给shell中的变量

如何通过控制器将两个不同模型的值作为 Laravel 8 中的单个返回变量传递给视图文件

如何将 Fetch API 的值传递给变量? [复制]

如何将反应形式的值传递给突变(变量)?

使用 Ajax 方法将变量传递给 python

当我将变量中的值传递给 JSON 代码时它不起作用但是如果我硬编码它在 PHP 中的值