代码行统计工具(python)

用python写的代码行统计工具。文件名为counter.py。可以统计代码文件中的注释行、代码行、空行和总行数。目前支持注释为//, /*...*/类型和注释为#类型的编程语言代码行统计。使用方法:

在counter.py的同级目录建立一个文件,命名为filelist.txt,在该文件中输入需统计的代码文件的绝对路径和文件名。如c:/test.c。每个文件名占一行。

counter.py代码如下:

import re

commentline = 0
blankline = 0
codeline = 0

def init():
    global commentline, blankline, codeline
   
    commentline = 0
    blankline = 0
    codeline = 0

def output(filename):
    global commentline, blankline, codeline
    
    print
    print "/*********************************************/"
    print "file name: " , filename
    print "code line: ", codeline
    print "comment line: ", commentline
    print "blank line: ", blankline
    print "total line: ", codeline + commentline + blankline
    print "/*********************************************/"
    
def count_c_like(filename):
    try:
        f = open(filename, 'r')
    except IOError, e:
        print
        print e
        return None

    global commentline, blankline, codeline
	
    iscomment = False
    for eachLine in f:
        if iscomment:
            commentline += 1
            if eachLine.find("*/", 0) != -1:
                iscomment = False
        elif re.match(" *//", eachLine) is not None:
            commentline += 1
        elif re.match(" */\*", eachLine) is not None:
            commentline += 1
            if re.search("/\*.*\*/", eachLine) is None:
                iscomment = True
        elif eachLine.isspace():
            blankline += 1
        else:
            codeline += 1
   
    f.close()
    return "OK"

def count_mk_like(filename):
    try:
        f = open(filename, 'r')
    except IOError, e:
        print
        print e
        return None

    global commentline, blankline, codeline
    for eachLine in f:
        if eachLine.isspace():
            blankline += 1
        elif re.match(" *#", eachLine) is not None:
            commentline += 1
        else:
            codeline += 1
   
    f.close()
    return "OK"
    
def main():
    try:
        f = open("filelist.txt", 'r')
    except IOError, e:
        print e
        raw_input('Press ENTER key to exit')
        return None
    global filename
    
    for eachLine in f:
        filename = eachLine.strip()
        if filename == '':
            continue
        
        init()
        result = "OK"
        if re.search("\.min$|\.mk$", filename) is not None:
            result = count_mk_like(filename)
        else:
            result = count_c_like(filename)
            
        if result == "OK":
            output(filename)
	
    f.close()
    raw_input('Press ENTER key to exit')


if __name__ == '__main__':
    main()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值