模块名称在变量中时导入模块

use*_*279 56 python python-2.7

可能重复:
Python中的动态模块导入

我正在编写一个小脚本,从目录中获取文件的名称,并将其传递给另一个模块,然后导入该文件.

所以流程就像1)获取模块名称(将其存储在变量中)2)将此变量名称传递给模块3)导入名称存储在变量名称中的模块

我的代码就像

data_files = [x[2] for x in os.walk(os.path.dirname(sys.argv[0]))]
hello = data_files[0]
modulename = hello[0].split(".")[0]

import modulename
Run Code Online (Sandbox Code Playgroud)

问题是当它到达import语句时,它将modulename作为实际模块名称而不是存储在此变量中的值.我不确定它在python中是如何工作的,任何解决这个问题的帮助都会很棒

mgi*_*son 49

你想要内置的__import__功能

new_module = __import__(modulename)
Run Code Online (Sandbox Code Playgroud)

  • 在您编写的代码运行后,`new_module` 中存储了什么?这是我现在引用`modulename`的方式,就像运行`import numpy as np`后`np`引用`numpy`的方式一样吗? (4认同)
  • IIRC,我相信`foo = __import __('foo')`应该等同于`import foo`.`bar =`__import __('foo')`与`import foo as bar`等相同.如果你正在处理一个包,那么包的`__init __.py`将按照惯例导入.例如`__import __('numpy').core`给你numpy核心子包,因为numpy的`__init __.py`进口`numpy.core`. (3认同)

mun*_*unk 30

importlib可能是要走的路.它的文档在这里.__import__对于大多数用途,它通常是优选的.

在您的情况下,您将使用:

import importlib
module = importlib.import_module(module_name, package=None)
Run Code Online (Sandbox Code Playgroud)

  • 如果您不知道路径,请使用`imp`模块中的[`imp.load_source(..)`(https://docs.python.org/2/library/imp.html#imp.load_source)模块`.py`文件. (4认同)
  • 如何使用此选项进行“from”导入并进行多个选择。就像“from configparser import ConfigParser, NoSectionError”?还有“from foo import *”? (2认同)