2011-04-23 17 views
9

क्या आपको पता है कि पाइथन लाइब्रेरी है जो कोड के बारे में आंकड़े उत्पन्न करती है? मैं एक पैकेज को इंगित करने और कक्षाओं, कार्यों, विधियों, डॉक्ब्लॉक लाइनों आदि की संख्या प्राप्त करने के बारे में सोच रहा हूं।पायथन: कोड आंकड़े

अंततः मस्ती के लिए लैम्बडा या अन्य पागल आंकड़ों की तरह बेकार सामान शामिल हो सकता है।

+2

अजगर उत्कृष्ट आत्मनिरीक्षण है। [एएसटी बनाएं] (http://docs.python.org/library/parser.html) अपने स्रोत से बाहर ('suite', फिर' totuple') और अपने दिल की सामग्री का विश्लेषण करें। – 9000

+2

धन्यवाद, और हाँ मैं अपना खुद का कोड कर सकता हूं लेकिन यह वास्तव में मैंने नहीं पूछा है। मैं पूछ रहा हूं कि कोई मौजूदा सुविधा लाइब्रेरी जानता है जो आत्मनिरीक्षण विवरण के साथ सांख्यिकी और सौदों को निकालता है। – moraes

उत्तर

7

लोग आम तौर पर उन चीज़ों से पैकेज नहीं बनाते हैं जो कोड के दर्जन या दो पंक्तियों में किए जा सकते हैं। निम्नलिखित सभी पायथन सिंटैक्स के उपयोग का विश्लेषण करता है और स्रोत में नोड आने के कितने बार मैपिंग एस्ट नोड्स देता है। 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]) 
+0

यह मेरे लिए काम किया। धन्यवाद। – xApple

0

शायद Tahar मदद कर सकते हैं, इसके बारे में कब तक प्रत्येक कार्य, विधि, वर्ग और मॉड्यूल हैं आँकड़े (कोड की लाइनों में) को प्रदर्शित करता है । हालांकि, चूंकि यह निरीक्षण मॉड्यूल का उपयोग कर रहा है, इसलिए यह अनपेक्षित तरीकों से चला सकता है यदि मॉड्यूल में से कोई एक विश्लेषण करता है जो एक जीयूआई या ऐसा कुछ लॉन्च करता है।

मैं एएसटी किसी दिन का उपयोग करने के लिए स्विच करूंगा, हालांकि मुझे नहीं पता कि एएसटी एक सेवा प्रदान कर सकता है जो निरीक्षण.getsourcelines() के समान है?

(संपादित)

Mergou (tokenize मॉड्यूल का उपयोग कर Tahar का पुनर्लेखन), अल्फा में है यहाँ कार्रवाई में इसके बारे में एक वीडियो है: http://www.youtube.com/watch?v=PI0iBZmInFU&feature=youtu.be

संबंधित मुद्दे