2011-04-23 4 views
9

Savez-vous s'il existe une bibliothèque Python qui génère des statistiques sur le code? Je pense à pointer sur un paquet et obtenir le nombre de classes, fonctions, méthodes, lignes docblock etc.Python: statistiques de code

Il pourrait éventuellement inclure des choses inutiles comme le nombre de lambdas ou d'autres statistiques folles, juste pour le plaisir.

+2

Python a une excellente introspection. [Créez AST] (http://docs.python.org/library/parser.html) de votre source ('suite', puis' totuple') et analysez le contenu de votre coeur. – 9000

+2

Merci, et oui je pourrais coder mon propre mais ce n'est pas vraiment ce que j'ai demandé. Je demande si quelqu'un connaît une bibliothèque de dépannage existante qui extrait des statistiques et traite des détails d'introspection. – moraes

Répondre

7

En général, les personnes ne fabriquent pas de paquets à partir d'une douzaine ou deux lignes de code. L'article suivant analyse l'utilisation de tous la syntaxe python et renvoie un mappage de dictionnaire ast nœuds à combien de fois ce nœud est apparu dans la source. Des exemples montrant le nombre de def et class sont également en dessous.

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

Cela a fonctionné pour moi. Merci. – xApple

0

Peut-être Tahar peut aider, il affiche des statistiques sur la durée de chaque fonction, méthode, classe et module sont (en lignes de code) . Cependant, puisqu'il utilise le module inspecter, il peut fonctionner de manière inattendue si l'un des modules analysés lance une interface graphique ou quelque chose comme ça.

Je passerai à utiliser AST un jour, même si je ne sais pas si AST peut fournir un service similaire à inspect.getsourcelines()?

(EDIT)

Mergou (la réécriture de tahar à l'aide du module de tokenize) est en alpha, voici une vidéo en action: http://www.youtube.com/watch?v=PI0iBZmInFU&feature=youtu.be