【问题标题】:Python: code statisticsPython:代码统计
【发布时间】:2011-08-11 11:43:57
【问题描述】:

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

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

【问题讨论】:

  • Python 具有出色的自省能力。 Create AST 从您的来源(suite,然后是 totuple)中取出并分析您的内心。
  • 谢谢,是的,我可以自己编写代码,但这并不是我真正要求的。我在问是否有人知道现有的便利库,可以提取统计数据并处理内省细节。

标签: python code-metrics


【解决方案1】:

人们通常不会用十几两行代码就能完成的事情来制作包。下面分析 all 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])

【讨论】:

    【解决方案2】:

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

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

    (编辑)

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

    【讨论】:

      【解决方案3】:

      你可以看看Pymetrics,或者查看其他工具enumerated there

      【讨论】:

        猜你喜欢
        • 2011-06-25
        • 2012-01-03
        • 1970-01-01
        • 2013-09-03
        • 1970-01-01
        • 2017-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多