This question already has answers here:
Parse a .py file, read the AST, modify it, then write back the modified source code
(12 个回答)
7年前关闭。
我在 python 中使用“ast”模块来创建抽象语法树。我希望能够编辑 AST(我正在使用“ast.NodeTransformer”进行编辑),然后将那棵新树写入一个新的 python 文件。根据网站“http://greentreesnakes.readthedocs.org/en/latest/index.html ”的说法,如果不使用第三方软件包,就无法做到这一点。这是真的,还是我可以使用“ast”模块将 AST 写入新的 python 文件?如果是这样,我该怎么做?似乎'ast'会支持这一点。
(12 个回答)
7年前关闭。
我在 python 中使用“ast”模块来创建抽象语法树。我希望能够编辑 AST(我正在使用“ast.NodeTransformer”进行编辑),然后将那棵新树写入一个新的 python 文件。根据网站“http://greentreesnakes.readthedocs.org/en/latest/index.html ”的说法,如果不使用第三方软件包,就无法做到这一点。这是真的,还是我可以使用“ast”模块将 AST 写入新的 python 文件?如果是这样,我该怎么做?似乎'ast'会支持这一点。
最佳答案
您将需要一个名为 codegen.py
的第三方模块,但它本身只是在引擎盖下使用了 bulitin AST 机制,非常简单。从那里你可以使用内置的 ast.NodeTransformer
机制来转换 AST 节点。
import ast
import codegen
class Visitor(ast.NodeTransformer):
def visit_Num(self, node):
return ast.Num(42)
x = Visitor()
t = ast.parse('x + y + z + 3')
out = x.visit(t)
print codegen.to_source(out)
# x + y + z + 42
关于python - 将 ast 模块中的抽象语法树转换为新的 python 文件。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22336375/
10-12 23:52