使用ast获取模块名称
如何使用 ast 获取 python 模块名称?我尝试了以下方法来获取模块节点,但看起来它没有名称信息:
class v(ast.NodeVisitor):
def visit_Module(self, node):
print "Module : %s" % node
v().visit_Module(ast.parse(f.read(), filename))
我基本上需要实际的模块名称(如果它位于包内,则需要完整的名称,例如 abmodule)。
How to get a python module name using ast? I tried the following to get the Module Node, but looks like it does not have the name information:
class v(ast.NodeVisitor):
def visit_Module(self, node):
print "Module : %s" % node
v().visit_Module(ast.parse(f.read(), filename))
I basically need the actual module name (If it is inside a package then the complete one like a.b.module).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
AFAIU,
ast
中不存在此信息。更正式地说,Python 中模块的抽象语法是:因此,正如您所看到的,模块只有一个主体,它是语句节点列表。没有名字。
请注意,您将
f.read()
传递给访问者。它返回文件的内容,而不实际知道或关心该文件是如何命名的 - 您可以从哪里获取模块名称?在执行 Python 代码时,您可以在 Python 代码内部使用
__name__
和__package__
。AFAIU, this information doesn't exist in
ast
. More formally, the abstract grammar for Module in Python is:So as you can see a
Module
just has a body which is a list of statement nodes. There's no name.Do note that you pass
f.read()
to the visitor. That returns the contents of the file, without actually knowing or caring how that file is named - where can you take the module name from it?From executing Python code, you can use
__name__
and__package__
from inside Python code.