在python中,如何导入文件名以数字开头

时间:2012-02-01 02:51:31

标签: python import

基本上有一个名为8puzzle.py的文件,我想将文件导入另一个文件(在同一文件夹中,我不能在提供文件时更改文件名)。无论如何在Python中这样做?我尝试了常用方式from 8puzzle import *,它给了我一个错误。

错误是:

>>> import 8puzzle
  File "<input>", line 1
    import 8puzzle
           ^
SyntaxError: invalid syntax
>>> 

4 个答案:

答案 0 :(得分:73)

你可以做到

puzzle = __import__('8puzzle')

非常有趣的问题。我记得不要用数字命名任何东西。

如果您想import * - 您应该check out this question and answer

答案 1 :(得分:23)

以上答案是正确的,但就目前而言,推荐的方法是使用import_module功能:

  

<强> importlib.import_module(name, package=None)
  导入模块。名字   参数指定以绝对或相对术语导入的模块   (例如pkg.mod..mod)。如果名称是以相对方式指定的   条件,那么package参数必须设置为的名称   用作解析包名称的锚点的包   (例如import_module('..mod', 'pkg.subpkg')将导入pkg.mod)。

     

import_module()函数充当简化包装器   importlib.__import__()。这意味着函数的所有语义都是   源自importlib.__import__()。最重要的区别   这两个函数之间是import_module()返回的   指定的包或模块(例如pkg.mod),而__import__()返回   顶级包或模块(例如pkg)。

     

如果您要动态导入自创建以来创建的模块   解释器开始执行(例如,创建了一个Python源文件),你   可能需要调用invalidate_caches()才能使用新模块   进口系统注意到了。

现在不推荐

__import__

  

<强> importlib.__import__(name, globals=None, locals=None, fromlist=(), level=0)
  内置__import__()函数的实现。

     

注意编程模块的导入应使用import_module()而不是此函数。

答案 2 :(得分:2)

请勿在导入中使用.py扩展名。

from 8puzzle import *是否有效?

对于它的价值,from x import *不是首选的Python模式,因为它会将该模块的命名空间渗透到当前上下文中。

通常,尝试从该模块导入您特别想要的内容。可以导入其他模块中的任何全局。

例如,如果你有8puzzle.foo你可以从8puzzle import

编辑:

虽然我的.py消息是正确的,但这还不够。

另一张海报的__import__('8puzzle')建议是正确的。但是,我强烈建议避免使用此模式

首先,它保留了一个内部的私有Python方法。 您基本上打破了导入模块意味着什么的基本假设。只需将文件重命名为其他内容,例如puzzle8,就可以解决此问题。

这会让经验丰富的Python程序员感到沮丧,他们希望知道你的导入是什么,并期望代码(尝试)符合PEP8

答案 3 :(得分:0)

文件目录结构如下:

 daily
   -- 20210504
         permutations.py
         __init__.py
   __init__.py

您可以通过 permutations__import__ 导入 importlib.import_module 模块。

官方文档推荐使用importlib.import_module

<块引用>

import(name, globals=None, locals=None, fromlist=(), level=0) -> 模块

导入模块。因为这个函数是供 Python 解释器使用而不是一般用途,所以最好 useimportlib.import_module()以编程方式导入模块。

有什么区别?

如果使用 __import__ 实现。 例如:

res = __import__('daily.20210504.permutations')

res 的结果是每日模块。 daily module

所以,如果要获取permutations模块,需要提供fromlist参数,其写法如下。

res = __import__('daily.20210504.permutations', fromlist=('daily.20210504'))

res 的结果现在可以看成 enter image description here 这是正确的结果。

如果我使用 importlib.import_module 会怎样?

res = importlib.import_module('daily.20210504.permutations')

这允许您直接获取 permutations 模块。