从以数字开头的模块导入类

时间:2019-12-08 11:03:36

标签: python python-import

我需要从以number开头的python文件中导入单个类(而不是整个文件)。 有一个关于导入整个模块的主题,它可以运行,但是找不到解决这个问题的方法。 (In python, how to import filename starts with a number

通常是:

from uni_class import Student

尽管文件名为123_uni_class

尝试了

的不同变体
importlib.import_module("123_uni_class")

uni_class=__import__("123_uni_class")

错误:

    from 123_uni_class import Student
            ^
 SyntaxError: invalid decimal literal

2 个答案:

答案 0 :(得分:0)

importlib.import_module("123_uni_class")在导入模块后返回模块,您必须给它一个有效的名称以重用它:

import importlib

my_uni_class = importlib.import_module("123_uni_class")

然后,您可以使用“ my_uni_class”名称访问模块。

如果import 123_uni_class as my_uni_class在此上下文中有效,则相当于123_uni_class

答案 1 :(得分:-1)

它对我有用:

Python 3.6.8 (default, Feb 14 2019, 22:09:48)
[GCC 7.4.0] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import importlib
>>> importlib.import_module('123_a')
<module '123_a' from '/path/to/123_a.py'>
>>> __import__('123_a')
<module '123_a' from '/path/to/123_a.py'>

除非您实际上有一些包含该行的源代码,否则您不会看到包含原语文本“来自123_uni_class import ...”的实际语法错误。

如果必须的话,还可以通过读取文件的内容并将它们exec()-放入可能提供的命名空间中,从而完全绕过导入系统。例如:

mod = {}
with open('123_uni_class.py') as fobj:
    exec(fobj.read(), mod)

Student = mod['Student']

例如,此通用技术用于读取用Python编写的配置文件等。我不建议这样做,但建议您只使用有效的模块名称。