2011-04-23 239 views
9

您是否知道是否有生成關於代碼的統計信息的Python庫?我正在考慮指向一個包,並獲取類,函數,方法,docblock行數等Python:代碼統計信息

它可能最終包括像lambda數或其他瘋狂的統計數字,只是爲了好玩的無用的東西。

+2

Python有極好的自省。 [創建AST](http://docs.python.org/library/parser.html)從你的源代碼('suite',然後'totuple')並分析你的內心。 – 9000 2011-04-23 13:56:37

+2

謝謝,是的,我可以編碼我自己,但這不是我問的。我問是否有人知道現有的便利圖書館提取統計數據並處理反省細節。 – moraes 2011-04-23 15:14:06

回答

7

人們通常不會在十二行或兩行代碼中完成軟件包。以下分析所有 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]) 
+0

這對我有用。謝謝。 – xApple 2011-11-30 11:25:45

0

也許Tahar可以提供幫助,它顯示每個函數,方法,類和模塊有多長統計(代碼行) 。但是,由於它使用的是inspect模塊,如果它分析的某個模塊啓動了一個GUI或類似的東西,它可能會以意想不到的方式運行。

雖然我不知道AST是否可以提供類似於inspect.getsourcelines()的服務,但我會轉而使用AST的某一天。

(EDIT)

Mergou(使用令牌化模塊塔希爾的重寫)是α,這裏是它在行動視頻:http://www.youtube.com/watch?v=PI0iBZmInFU&feature=youtu.be