导入带有标点符号的.py文件
这个问题其实挺简单的。
现在,我正在尝试导入其他的Python文件,我知道如果文件在同一个文件夹里,代码是非常简单的。
根据我的了解,只需要这样写:
import filename
不过,我的一些文件名里有标点符号,比如'4.1'或者'4-1'。请问有没有办法直接导入这些文件,还是说我需要改一下文件名呢?
目前我在使用Python 3,但我的课程是用Python 2。
非常感谢你的帮助!
2 个回答
0
你不能用 import
语句导入带有特殊符号的名字,但你可以使用内置的 __import__
来实现:
module = __import__("strange-name-1")
import
会创建变量。它只能处理有效的变量名称。通过使用 __import__
,你可以自己指定一个不同的名字,并且可以用字符串来引用目标模块。
另外,importlib.import_module()
函数虽然没有 __import__
强大,但在这种情况下也是一个有效的替代方案。
2
如果你的文件名里没有多余的点,那么可以用importlib
来处理。例如,假设你的文件名是4-1.py
:
import importlib
my_module = importlib.import_module('4-1')
不过,你还是需要把模块对象绑定到一个有效的名字上,这个名字必须是合法的Python标识符,尽管my_module.__name__
这个属性本身并没有这样的限制。
如果文件名里有多个点,那情况就复杂了,因为点在Python的导入系统中表示你有一个包里的子模块结构。不过,仍然可以用imp
,这是importlib
的前身,来加载这样的文件:
import imp
my_module = imp.load_source('my_module', 'strange.name-1.py')
当你在运行时有一个模块名存储在字符串变量中时,使用importlib
是很正常的。比如,你可以用它来确保一组模块名和某个外部数据源中的名字一致,而这些名字是你无法控制的。不过,如果只是为了处理一些奇怪的文件名,而这些文件名是你能控制的,使用这个方法就不太好,最好还是直接重命名文件。