1 #统计代码量,显示离10W行代码还有多远 2 #递归搜索各个文件夹 3 #显示各个类型的源文件和源代码数量 4 #显示总行数与百分比 5 6 import os 7 import easygui as g 8 9 #查找文件10 def find_file(file_path,target):11 os.chdir(file_path)12 all_files=os.listdir(os.curdir)13 for each in all_files:14 #print(each)15 fext=os.path.splitext(each)[1]16 if fext in target:17 lines=calc_code(each) #统计行数18 #print("文件%s的代码行数是%d"%(each,lines))19 #统计文件数20 try:21 file_list[fext]+=122 except KeyError:23 file_list[fext]=124 #统计源代码行数25 try:26 source_list[fext] += lines27 #print(source_list[fext])28 except KeyError:29 source_list[fext] = lines30 #print(source_list[fext])31 32 33 34 if os.path.isdir(each):35 find_file(each,target) # 递归调用36 os.chdir(os.pardir) #返回上层目录37 38 39 #统计行数40 def calc_code(file_name):41 lines=042 with open(file_name,encoding='gb18030',errors='ignore') as f:43 print("正在分析文件%s..."%file_name)44 try:45 for eachline in f:46 lines += 147 except UnicodeDecodeError:48 pass49 print("文件%s分析完毕,包含代码行%d." %(file_name,lines))50 return lines51 52 53 #显示结果54 def show_result(start_dir):55 lines=056 total=057 text=''58 59 for i in source_list:60 lines=source_list[i]61 total+=lines62 text+='%s源文件%d个,源代码%d行\n'%(i,file_list[i],lines )63 64 title='统计结果'65 msg='目前代码行数:%d\n完成进度:%.2f%%\n距离十万行代码还差%d行'%(total,total/1000,100000-total)66 g.msgbox(msg,title,text)67 68 #file_path=input("要查找的路径; ") # C:\\Users\\54353\\PycharmProjects\\untitled69 target=['.py','.java','.c','.cc','.cpp'] #定义需要查找的源文件类型70 file_list={}71 source_list={}72 g.msgbox('请打开您的文件夹','统计代码量')73 path=g.diropenbox('请选择您的代码库:')74 75 find_file(path,target)76 show_result(path)