python - 解析 .py 文件,读取 AST,修改它,然后写回修改后的源代码

标签 python compiler-construction abstract-syntax-tree

我想以编程方式编辑 python 源代码。基本上我想读取一个 .py 文件,生成 AST ,然后写回修改后的python源代码(即另一个.py文件)。

有一些方法可以使用标准的python模块来解析/编译python源代码,例如astcompiler .但是,我认为它们中的任何一个都不支持修改源代码的方式(例如删除此函数声明),然后将修改后的 python 源代码写回。

更新:我想这样做的原因是我想写一个 Mutation testing library对于 python,主要是通过删除语句/表达式,重新运行测试并查看中断。

最佳答案

Pythoscope对它自动生成的测试用例执行此操作,2to3 也是如此。 python 2.6 的工具(它将 python 2.x 源转换为 python 3.x 源)。

这两个工具都使用 lib2to3库,它是 python 解析器/编译器机制的实现,当它从源 -> AST -> 源往返时,可以保留源中的注释。

rope project如果您想进行更多重构(如转换),可能会满足您的需求。

ast模块是您的另一个选择,there's an older example of how to "unparse" syntax trees back into code (使用解析器模块)。但是 ast 模块在对代码进行 AST 转换然后转换为代码对象时更有用。

redbaron项目也可能很合适(ht Xavier Combelle)

关于python - 解析 .py 文件,读取 AST,修改它,然后写回修改后的源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/768634/

相关文章:

python - 使用字典中的函数作为菜单

haskell - 为什么 Haskell 不支持相互递归的模块?

Delphi2010编译错误: F2084 Internal Error: L1737

c++ - 如何获取clang抽象语法树右侧的整个表达式?

java - 将 Java 代码转换为 Eclipse 和 Javac AST 注入(inject)语句

c - 从 C 代码构建 AST

python - “列表”对象不能解释为整数 - 有没有办法将列表转换为整数?

python - 无法导入模块 'lambda_function' : No module named 'cx_Oracle'

python - 学习 Python 练习

c++ - 编译 Sundance-4.73