python实现代码行的统计

最近闲来无事写了一个统计C或者C++代码行数的程序,主要用到了python以及正则表达式

#-*-coding:utf-8 
#!/usr/bin/python
import re 
import os
import sys
‘‘‘get the file or dir in one path‘‘‘
def getfilename(path):
    if os.path.exists(path):
        filelist = os.listdir(path)
    return filelist

‘‘‘get the file with the ending of .cpp‘‘‘
def isfile(filelist):
    ‘‘‘match the that end with .cpp‘‘‘
    pattern = re.compile(r‘^\w.{0,}cpp$‘)  
    filetemp = []
    for file in filelist:
        if os.path.isfile("F:\\"+file)and pattern.match(file):
            filetemp.append("F:\\"+file)
    return filetemp

‘‘‘caculate the codeline and the commentline‘‘‘
def caculate(filelist):
    ‘‘‘match the beginning of /* and the ending of */‘‘‘
    fullpattern = re.compile(r"^(/\*)(.+)(\*/$)")  
    ‘‘‘only match the beginning of /*‘‘‘
    beginpattern = re.compile(r"^(/\*)")   
    ‘‘‘only match the ending of */‘‘‘       
    endpattern = re.compile(r"\*/$")    
    ‘‘‘match the blank line‘‘‘           
    pattern = re.compile("\\s+$")                 
    comentline = 0                        
    codeline = 0          
    filenum = 0                 
    for file in filelist:
        try:
            f = open(file,‘r‘)
        except:
            print "open file error"
        filenum = filenum + 1
        print "begin to caculate the" + str(filenum) + "‘s" + " file"     
        flag = 0
        while 1:
            line = f.readline()
            if not line:
                break
            if pattern.match(line):
                continue
            ‘‘‘remove the blank line‘‘‘
            line2 = line.strip()            
            if fullpattern.match(line2):
                comentline = comentline + 1
            elif beginpattern.match(line2):
                comentline = comentline + 1
                flag = 1
            elif endpattern.match(line2):
                comentline = comentline + 1
                flag = 0
            elif flag == 1:
                comentline = comentline +1
            else:
                codeline = codeline + 1
        try:
            f.close()
        except:
            print "close file error"
    
    return (comentline, codeline)
            
if __name__ == "__main__":
        
        dirlist =  getfilename("F:\\")              
        filelist = isfile(dirlist)
        if filelist:
            print " find C or C++ file"
        else:
            print "not find C or C++ file"
            sys.exit(0)
        (comentline,codeline) = caculate(filelist)
        print "comenline is: " + str(comentline)
        print "codeline is: " + str(codeline)
        
        

        
  

        
        
 

测试文件为:


测试结果:

从上面可以看到我我们统计了两个文件,之所以少一个是因为其中一个文件的后缀为.c而程序只会匹配 以.cpp结尾的文件,统计的文件一个为空。所以我们的结果只是其中一个文件(结果是正确没有注释,不算空行有34条代码)当然想统计空行也很容易(正则表达式上面已经给出只需做稍微修改即可

 

python实现代码行的统计,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。