12

你知道是否有一个 Python 库可以生成关于代码的统计信息吗?我正在考虑指向一个包并获取类、函数、方法、文档块行等的数量。

它最终可能包括无用的东西,比如 lambda 的数量或其他疯狂的统计数据,只是为了好玩。

4

3 回答 3

8

人们通常不会用十几两行代码就能完成的东西来制作包。下面分析所有python 语法的用法,并返回一个字典,将 ast 节点映射到该节点在源中出现的次数。def显示和class语句数量的示例也在其下方。

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])
于 2011-04-23T15:23:38.560 回答
4

你可以看看 Pymetrics ,或者检查那里列举的其他工具

于 2011-04-23T15:26:08.283 回答
0

也许Tahar可以提供帮助,它显示有关每个函数、方法、类和模块的统计信息(以代码行数)。但是,由于它使用的是检查模块,如果它分析的模块之一启动 GUI 或类似的东西,它可能会以意想不到的方式运行。

总有一天我会改用 AST,虽然我不知道 AST 是否可以提供类似于 inspect.getsourcelines() 的服务?

(编辑)

Mergou(使用 tokenize 模块对 tahar 的重写)处于 alpha 阶段,这是它的实际操作视频:http ://www.youtube.com/watch?v=PI0iBZmInFU&feature=youtu.be

于 2013-01-04T20:42:41.200 回答