在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) 。