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

Sim*_*Guo 66 python import

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

错误是:

>>> import 8puzzle
  File "<input>", line 1
    import 8puzzle
           ^
SyntaxError: invalid syntax
>>> 
Run Code Online (Sandbox Code Playgroud)

Yuj*_*ita 75

你可以做到

puzzle = __import__('8puzzle')
Run Code Online (Sandbox Code Playgroud)

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

如果你愿意import *- 你应该看看这个问题和答案.

  • 更好的方法(至少使用 python 2.7)是使用 'importlib' 模块: puzzle = importlib.import_module('8puzzle') (5认同)
  • 虽然迟到了,但另一个用例是从 Alembic 迁移导入,因为它们都以随机哈希开始 (4认同)
  • 帮助拯救世界,或至少拯救你的同学.如果你得到一个不可能的导入,请提请教师注意.是的,有时他们讨厌错误,但是如果你遇到这个问题,其他人也是如此,尽管这个答案有效,但这不是正确的解决方案(除非该类是"混淆的Python 101"). (3认同)
  • 这实际上有一个很好的用例 - 作为编译/生产过程的一部分,如果以字典形式命名,将 python 模块连接在一起是最简单的(通常没关系,但常量和导入在顶部,'if __name__ ' 在底部,因此一些以 '0' 开头的模块可能很有用。)在调试这种不寻常的目录布局时也很有用,当与 inotify 或 watch 结合使用时,例如: watch -n .1 'cat * | python',它会每十分之一秒(或至少尽可能快地)加载你的 python 应用程序,或者: cat $(find . -name "*.py") | Python (3认同)

lai*_*e9m 28

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

importlib.import_module(name, package=None)
导入模块.name参数指定以绝对或相对术语导入的模块(例如,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()而不是此功能.


小智 5

文件目录结构如下:

 daily
   -- 20210504
         permutations.py
         __init__.py
   __init__.py
Run Code Online (Sandbox Code Playgroud)

您可以permutations通过__import__或导入模块importlib.import_module

官方文档建议使用importlib.import_module.

导入(名称,全局=无,本地=无,fromlist =(),级别= 0) - >模块

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

有什么不同?

如果使用__import__. 例如:

res = __import__('daily.20210504.permutations')
Run Code Online (Sandbox Code Playgroud)

res的结果是daily模块。 日常模块

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

res = __import__('daily.20210504.permutations', fromlist=('daily.20210504'))
Run Code Online (Sandbox Code Playgroud)

res 的结果现在可以看作 在此输入图像描述 这是正确的结果。

如果我使用怎么办importlib.import_module

res = importlib.import_module('daily.20210504.permutations')
Run Code Online (Sandbox Code Playgroud)

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