这是一个相对简单的问题。
目前,我正在尝试导入其他python文件,并且知道代码对于同一目录中的文件非常简单。
据我所知,它只是:
导入文件名
然而,我的一些文件中有标点符号,例如' 4.1'或者' 4-1'。无论如何都要按原样导入文件,还是需要更改文件名?
目前我正在运行python 3,但我的班级正在使用python 2
提前非常感谢你!
答案 0 :(得分:2)
如果文件名中没有额外的点,那么importlib
就可以了。例如,假设您有文件名4-1.py
:
import importlib
my_module = importlib.import_module('4-1')
您仍然必须将模块对象绑定到valid python identifier的名称,即使my_module.__name__
属性本身并没有实际限制。
如果文件名中有更多的点,则情况更棘手,因为点向Python的导入系统指示您在package内具有子模块结构。尽管如此,仍然可以使用importlib
加载此类文件,import imp
my_module = imp.load_source('my_module', 'strange.name-1.py')
的前身:
importlib
在运行时将模块名称存储在字符串变量中时,使用{{1}}是很正常的。例如,您可以使用它来确保模块名称集合与某些外部数据源的一致性,其中名称不受您的控制。但是,使用它只是为了解决具有您控制范围内的奇怪文件名的问题 - 最好只是重命名文件。
答案 1 :(得分:0)
您无法使用import
语句导入包含符号的名称,但始终可以使用内置的__import__
:
module = __import__("strange-name-1")
import
创建变量。它只能使用有效的变量标识符。使用__import__
,您自己分配一个不同的名称,并可以使用字符串引用目标模块。
此外,importlib.import_module()
函数的功能不如__import__
,但是此用例的有效替代方法。