统计指定路径代码量

 1 import easygui as g
 2 import os
 3 
 4 def show_result(path):
 5     text=''
 6     total=0
 7     for each_ext in ext_dict:
 8         total += ext_dict[each_ext]
 9         text += '【%s】源文件有【%d】个,代码【%d】行\n'% (each_ext,ext_list[each_ext],ext_dict[each_ext])
10 
11         msg = '您目前累计编写了【%d】行代码,完成进度:【%.2f%%】,离10万行代码还差【%d】,请继续努力!' % (total,total/1000,100000-total)
12         title ='统计结果'
13     g.textbox(msg,title,text)
14         
15 
16 def calc_line(file_name):
17     lines = 0
18     with open(file_name) as f:
19         try:
20             for each_line in f:
21                 lines+=1
22         except UnicodeDecodeError:
23             pass #遇到不兼容情况则继续
24     return lines #返回计算的行数
25 
26 
27 def search_file(start_dir):
28     os.chdir(start_dir)
29 
30     for each_file in os.listdir(os.curdir):#遍历当前目录下的每一个文件
31 
32         if os.path.isfile(each_file):#如果是一个文件
33             ext = os.path.splitext(each_file)[1]#取其扩展名
34             if ext in target:# 如果扩展名在目标中
35                 lines = calc_line(each_file)#打开这个文件并计算行数
36 
37                 try:
38                     ext_dict[ext] += lines #扩展名的字典 如果扩展名不存在则新建一个并且赋值lines
39                 except KeyError:
40                     ext_dict[ext] = lines
41                 try:
42                     ext_list[ext] += 1 #记录源文件有多少个,区别于记录多少行的字典
43                 except KeyError:
44                     ext_list[ext] = 1
45 
46         if os.path.isdir(each_file):#如果是目录,则创造递归
47             search_file(each_file)
48             os.chdir(os.pardir)#递归完成返回上一层目录
49 
50 
51 def choice_path():
52     msg = '请选择您的代码库'
53     title = '浏览您的文件夹'
54     
55     path = g.diropenbox(msg,title)
56     return path
57 
58 
59 
60 target=['.py','.c']
61 
62 ext_dict={}
63 ext_list={}
64 path = choice_path()
65 search_file(path)
66 show_result(path)

 

posted @ 2017-02-19 23:17  道高一尺  阅读(395)  评论(0编辑  收藏  举报