你知道是否有一个Python库可以生成关于代码的统计信息吗? 我想指向一个包并获取类,函数,方法,docblock行数等数量。 最终它可能包括无用的东西,例如lambda的数量或其他疯狂的统计数据,只是为了好玩。
一般人不会将可以在十几行代码内完成的事情打包成软件包。以下内容分析了所有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])
或许Tahar可以帮忙,它可以显示每个函数、方法、类和模块的代码行数统计。然而,由于它使用了inspect模块,如果分析的模块启动了GUI或类似的操作,它可能会以意想不到的方式运行。
我将在未来转向使用AST,虽然我不知道AST是否能提供类似于inspect.getsourcelines()的服务?
(编辑)
Mergou(使用tokenize模块重写的Tahar)处于alpha测试阶段,这里有一个演示视频:http://www.youtube.com/watch?v=PI0iBZmInFU&feature=youtu.be
suite
和totuple
),并进行深入分析。 - 9000