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'会支持这一点。

最佳答案

您将需要一个名为 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