如何使用ast获取python模块名称?我尝试了以下方法来获取模块节点,但看起来它没有名称信息:
class v(ast.NodeVisitor):
def visit_Module(self, node):
print "Module : %s" % node
v().visit_Module(ast.parse(f.read(), filename))
我基本上需要实际的模块名称(如果它在一个包中,那么完整的一个像a.b.module)。
答案 0 :(得分:4)
AFAIU,此信息不存在于ast
中。更正式地说,Python中的Module的抽象语法是:
mod = Module(stmt* body)
| Interactive(stmt* body)
| Expression(expr body)
-- not really an actual node but useful in Jython's typesystem.
| Suite(stmt* body)
因此,您可以看到Module
只有一个正文列表的正文。没有名字。
请注意您将f.read()
传递给访问者。这会返回文件的内容,而不会真正了解或关注该文件的命名方式 - 在哪里可以从中获取模块名称?
从执行Python代码开始,您可以在Python代码中使用__name__
和__package__
。