weiqi7777

使用python统计代码行数

0
阅读(2794)

最近在学python,不得不说这门语言很是好用。利用easygui模块,可以编程界面了。在加上一点代码,就可以统计代码行数了。

重点是使用easygui模块。关于esaygui模块的使用,可以参考小甲鱼的网站

http://bbs.fishc.com/forum.php?mod=viewthread&tid=46069&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403

然后就是OS模块,因为要涉及要文件目录的操作。

代码如下:

# -*- coding: utf-8 -*-
import sys
import codecs
from easygui import *  
import os

# C  C++  python  verilog  matlab
code_hang = [0,0,0,0,0]
# C  C++  python  verilog  matlab
code_number = [0,0,0,0,0]

def list_file(directory):
    pwd_list = os.listdir(directory)
    for i in pwd_list:
        if '.' not in i: # 如果是目录的话
            try:
                now_pwd = directory + '\\' + i  #得到目录的绝对路径
                list_file(now_pwd)              #在目录中统计代码行数
            except:
                pass
        else:  #如果不是目录,对文件进行分析
            if '.c' in i:  #verilog code file
                code_number[0] += 1
                with codecs.open(directory + '\\' + i,encoding='utf-8') as file:
                    code_hang[0] += file.read().count('\n')#统计回车的个数即可得到代码的行数
            elif '.cpp' in i:
                code_number[1] += 1
                with codecs.open(directory + '\\' + i,encoding='utf-8') as file:
                    code_hang[1] += file.read().count('\n')
            elif '.py' in i:
                code_number[2] += 1
                with codecs.open(directory + '\\' + i,encoding='utf-8') as file:
                    code_hang[2] += file.read().count('\n')
            elif '.v' in i:
                code_number[3] += 1
                with codecs.open(directory + '\\' + i,encoding='utf-8') as file:
                    code_hang[3] += file.read().count('\n')
            elif '.m' in i or '.M' in i:
                code_number[4] += 1
                with codecs.open(directory + '\\' + i,encoding='utf-8') as file:
                    code_hang[4] += file.read().count('\n')
            else:
                pass

directory = diropenbox('','请选择一个目录')        

list_file(directory)

contex = """【.c】源文件%d个,源代码共有%d行
【.cpp】源文件%d个,源代码共有%d行
【.py】源文件%d个,源代码共有%d行
【.v】源文件%d个,源代码共有%d行
【.m】源文件%d个,源代码共有%d行
""" %(code_number[0],code_hang[0],code_number[1],code_hang[1],\
      code_number[2],code_hang[2],code_number[3],code_hang[3],\
      code_number[4],code_hang[4],)

sum_code_hang = sum(code_hang)
if sum_code_hang < 100000:
    code_percent = sum_code_hang / 100000 * 100
    differ = 100000 - sum_code_hang
else:
    code_percent = 100
    differ = 0

contex_msg = """你目前共累积编写了%d行代码,完成进度%.2f
""" %(sum_code_hang,code_percent)
if sum_code_hang >= 100000:
    contex_msg += "恭喜你,完成了10万行代码目标"
else:
    contex_msg += "离10万行代码还差%d行,请继续努力!" %differ

textbox(contex_msg,'统计结果',contex)



代码也比较简单,这里统计了C C++ python verilog matlab五种代码。

clip_image002