在python中,如何导入文件名以数字开头
基本上有一个名为8puzzle.py
的文件,我想将文件导入到另一个文件(在同一个文件夹中,因为提供的文件我无法更改文件名)。 有无论如何在Python中做到这一点? 我试图from 8puzzle import *
通常的方式,它给了我一个错误。
错误是:
>>> import 8puzzle File "<input>", line 1 import 8puzzle ^ SyntaxError: invalid syntax >>>
你可以做
puzzle = __import__('8puzzle')
非常有趣的问题。 我会记住不要用数字来命名任何东西。
如果你想import *
– 你应该检查出这个问题和答案 。
上面的答案是正确的,但到目前为止,推荐的方法是使用import_module
函数:
importlib.import_module(name, package=None)
导入一个模块。 name参数指定以绝对或相对方式导入的模块(例如,pkg.mod
或..mod
)。 如果名称是用相对的术语来指定的,那么package参数必须被设置成作为parsing包名称的锚的名称(例如import_module('..mod', 'pkg.subpkg')
将导入pkg.mod
)。import_module()函数充当
importlib.__import__()
的简化包装。 这意味着函数的所有语义派生自importlib.__import__()
。 这两个函数最重要的区别是import_module()
返回指定的包或模块(例如pkg.mod
),而__import__()
返回顶层包或模块(例如pkg
)。如果您正在dynamic导入自解释程序开始执行以来创build的模块(例如,创build了Python源文件),则可能需要调用
invalidate_caches()
以便导入系统注意到新模块。
现在不推荐__import__
。
importlib.__import__(name, globals=None, locals=None, fromlist=(), level=0)
内置的__import__()
函数的实现。注意编程导入模块应使用
import_module()
而不是此函数。
不要在导入中使用.py
扩展名。
from 8puzzle import *
工作吗?
对于它的价值, from x import *
不是首选的Python模式,因为它会将该模块的名称空间放入当前的上下文中。
一般来说,尝试从该模块中导入特别想要的东西。 来自其他模块的任何全局都可以导入。
例如,如果你有8puzzle.foo
你可以从8puzzleimport
编辑:
虽然我的.py
信息是正确的,但还不够。
另一张海报的__import__('8puzzle')
build议是正确的。 不过, 我强烈build议避免这种模式 。
首先,它保留了一个内部的私有Python方法。 你基本上打破了能够导入模块意味着什么的基本假设。 只需将文件重命名为其他内容,如puzzle8
,就可以解决这个问题。
这将会让有经验的Python程序员感到沮丧,他们期望知道你的import是在顶端,并期待代码(符合PEP8) 。