在Python内部解析Python代码?

23 投票
3 回答
16992 浏览
提问于 2025-04-15 17:28

我们有一个比较老的C++工具,它可以自动生成一些Python代码。今天我试着去看这个C++源代码,结果真是让人想自杀。我的目标是清理这个工具生成的源代码,并通过添加sphinx标签,把类链接到我们的内部文档系统。

现在我想知道,是否有什么很棒的工具可以在Python中解析Python代码呢?

类似这样的东西有很多:

foo._methods_.append()

Snip 500 lines

foo._methods_.append()

有什么建议吗?

基本上,我现在有一堆功能正常但结构混乱的代码,我想提取一些特定的部分,把它们移动到自己的文件里,并清理掉那些杂七杂八的东西。

我快速看了一下parser和AST,但找不到它们被实际使用的例子。

3 个回答

1

你可以试试一些Python文档生成工具,看看能否帮助你解决整体问题。我用过epydoc,效果很好。

或者,如果你能说服你的老板花200美元,买一份SparxSystems的Enterprise Architect。这款软件可以对你的Python代码进行逆向工程,生成类图,并让你点击类图查看底层代码。它不仅支持Python,还适用于很多其他编程语言,是一个很棒的设计和文档工具。(还有一个99美元的版本,但那个不包括代码导入功能。)

3

根据你的需求,你可能还想了解一下2to3这个库。它的主要功能是帮助把Python 2.x的程序自动转换成Python 3.0,所以它的使用场景就是拿一个Python源文件,进行一些处理,然后输出一个新的源文件。

lib2to3相比于ast模块有一个好处,就是ast在处理时不会保留空格和注释,而lib2to3会保留这些。如果你已经在处理自动生成的代码,这可能对你来说就不是问题了。

17

你可以使用 tokenize 模块来把 Python 代码分解成一个个小部分,这些小部分叫做“标记”。比如说,这个脚本可以用来去掉 Python 代码中的注释和文档字符串

另外,你也可以使用 parser 模块。

或者使用 ast 模块。

撰写回答