mor*_*aes 11 python code-metrics
你知道是否有一个Python库可以生成有关代码的统计信息吗?我正在考虑指向一个包并获取类,函数,方法,docblock行等的数量.
它最终可能包括像lambdas或其他疯狂统计数字这样无用的东西,只是为了好玩.
人们通常不会用可以用十几行代码完成的事情来制作包.下面分析了所有 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])
Run Code Online (Sandbox Code Playgroud)