我需要从以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
答案 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编写的配置文件等。我不建议这样做,但建议您只使用有效的模块名称。