Python: 代码统计

13
你知道是否有一个Python库可以生成关于代码的统计信息吗? 我想指向一个包并获取类,函数,方法,docblock行数等数量。 最终它可能包括无用的东西,例如lambda的数量或其他疯狂的统计数据,只是为了好玩。

2
Python具有出色的内省能力。可以从源代码中创建AST(使用suitetotuple),并进行深入分析。 - 9000
2
谢谢,是的,我可以编写自己的代码,但那不是我所问的。我在询问是否有人知道一个现有的方便库,可以提取统计信息并处理内省细节。 - moraes
3个回答

8

一般人不会将可以在十几行代码内完成的事情打包成软件包。以下内容分析了所有Python语法的使用情况,并返回一个字典,将ast节点映射到它在源代码中出现的次数。下面还提供了显示defclass语句数量的示例。

import collections
import os
import ast

def analyze(packagedir):
    stats = collections.defaultdict(int)
    for (dirpath, dirnames, filenames) in os.walk(packagedir):
        for filename in filenames:
            if not filename.endswith('.py'):
                continue

            filename = os.path.join(dirpath, filename)

            syntax_tree = ast.parse(open(filename).read(), filename)
            for node in ast.walk(syntax_tree):
                stats[type(node)] += 1   

    return stats

print("Number of def statements:", analyze('.')[ast.FunctionDef])
print("Number of class statements:", analyze('.')[ast.ClassDef])

4

0

或许Tahar可以帮忙,它可以显示每个函数、方法、类和模块的代码行数统计。然而,由于它使用了inspect模块,如果分析的模块启动了GUI或类似的操作,它可能会以意想不到的方式运行。

我将在未来转向使用AST,虽然我不知道AST是否能提供类似于inspect.getsourcelines()的服务?

(编辑)

Mergou(使用tokenize模块重写的Tahar)处于alpha测试阶段,这里有一个演示视频:http://www.youtube.com/watch?v=PI0iBZmInFU&feature=youtu.be


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接