代码行统计工具(python)

来源:互联网 发布:一般公司的网络维护 编辑:程序博客网 时间:2024/06/11 17:33

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

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

counter.py代码如下:

import recommentline = 0blankline = 0codeline = 0def init():    global commentline, blankline, codeline       commentline = 0    blankline = 0    codeline = 0def 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()


原创粉丝点击