python文件ast和没有库

时间:2018-08-21 14:38:48

标签: python abstract-syntax-tree inspect

我正在尝试读取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)

1 个答案:

答案 0 :(得分:1)

inspect.getsource函数从源文件中查找源代码,因此它对您不起作用。


实际上有一个工具可以执行您想要的操作,即转换python代码:2to3 tool!

该工具提供了一个lib2to3库,可用于编写“修复程序”,即将源代码的一部分更改为其他内容的代码段。

不幸的是,它并没有得到很好的记录,因此您必须通过查看python来源中的标准修复程序来学习如何编写修复程序。

定义修复程序时,还可以指定PATTERN,以便仅在匹配这种子树时调用修复程序。

此后,您可以运行2to3工具并指定仅使用已定义的修复程序,最终得到所需的结果。

您应该真正了解Extendind 2to3 with your own fixers,它帮助我编写了很多修复程序,以更新setup.py脚本和类似程序中的依赖项/更改版本。