导入带有标点符号的.py文件

1 投票
2 回答
965 浏览
提问于 2025-04-18 17:13

这个问题其实挺简单的。

现在,我正在尝试导入其他的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是很正常的。比如,你可以用它来确保一组模块名和某个外部数据源中的名字一致,而这些名字是你无法控制的。不过,如果只是为了处理一些奇怪的文件名,而这些文件名是你能控制的,使用这个方法就不太好,最好还是直接重命名文件。

撰写回答