我正在尝试读取python文件,进行一些更改(构造函数的乘积并将它们内联),并将其写回到文件中。
Python提供了ast模块,该模块可以将其代码解析为ast,但是没有反向转换的方法,我知道有一些库,但是我不能使用它们。我尝试将树编译为代码对象,并且它们获取其源代码,但是现在我的方法仅生成文件的一部分。我在做什么错了?
import ast
import inspect
module_path = "python_file.py"
with file(module_path, "r") as f:
result = ast.parse(f.read(), module_path)
print(ast.dump(result, include_attributes=True))
result = compile(result, module_path, mode='exec')
result = inspect.getsource(result)
print(result)
答案 0 :(得分:1)
inspect.getsource
函数从源文件中查找源代码,因此它对您不起作用。
实际上有一个工具可以执行您想要的操作,即转换python代码:2to3
tool!
该工具提供了一个lib2to3
库,可用于编写“修复程序”,即将源代码的一部分更改为其他内容的代码段。
不幸的是,它并没有得到很好的记录,因此您必须通过查看python来源中的标准修复程序来学习如何编写修复程序。
定义修复程序时,还可以指定PATTERN
,以便仅在匹配这种子树时调用修复程序。
此后,您可以运行2to3
工具并指定仅使用已定义的修复程序,最终得到所需的结果。
您应该真正了解Extendind 2to3 with your own fixers,它帮助我编写了很多修复程序,以更新setup.py
脚本和类似程序中的依赖项/更改版本。