Python实现代码统计工具
本文实例为大家分享了Python实现代码统计工具的具体代码,供大家参考,具体内容如下
思路:首先获取所有文件,然后统计每个文件中代码的行数,最后将行数相加.
实现的功能:
统计每个文件的行数;
统计总行数;
支持指定统计文件类型,排除不想统计的文件类型;
排除空行;
排除注释行
importos importsys importos.path #foriinsys.argv: #print(i) #判断单个文件的代码行数 defcount_file_lines(file_path): line_count=0 flag=True try: fp=open(file_path,"r",encoding="utf-8") encoding_type="utf-8" fp.close() except: encoding_type="gbk" withopen(file_path,"r",encoding=encoding_type)asfp: forlineinfp: #print(line_count) ifline.strip()=="": continue else: ifline.strip().endswith("'''")andflag==False: flag=True continue ifline.strip().endswith('"""')andflag==False: flag=True continue ifflag==False: continue ifline.strip().startswith("#encoding")orline.strip().startswith("#-*-"): line_count+=1 #elifline.strip().startswith('"""')andline.strip().endswith('"""')andline.strip()!='"""': #continue #elifline.strip().startswith("'''")andline.strip().endswith("'''")andline.strip()!="'''": #continue elifline.strip().startswith('#'): continue elifline.strip().startswith("'''")andflag==True: flag=False continue elifline.strip().startswith('"""')andflag==True: flag=False continue else: line_count+=1 returnline_count defcount_code_lines(path,file_types=[]): #判断路径是否存在 ifnotos.path.exists(path): print("您输入的目录或文件路径不存在") return0 line_count=0#代码行总数 file_lines_dict={}#每个文件代码行数 #判断是否为文件 ifos.path.isfile(path): file_type=os.path.splitext(path)[1][1:]#取到文件后缀名 #判断文件类型是否满足条件 iflen(file_types)==0: file_types=["py","cpp","c","java","ruby","ini","go","html","css","js","txt","vbs","php","asp","sh"] iffile_typeinfile_types: line_count=count_file_lines(path) returnline_count else: file_path=[] forroot,dirs,filesinos.walk(path): forfileinfiles: file_path.append(os.path.join(root,file)) forfinfile_path: file_type=os.path.splitext(f)[1][1:] iflen(file_types)==0: file_types= ["py","cpp","c","java","ruby","ini","go","html","css","js","txt","vbs","php","asp","sh"] iffile_typenotinfile_types: continue line_num=count_file_lines(f) line_count+=line_num file_lines_dict[f]=line_num returnline_count,file_lines_dict if__name__=="__main__": print(sys.argv) iflen(sys.argv)<2: print("请输入待统计行数的代码绝对路径!") sys.exit() count_path=sys.argv[1] file_types=[] iflen(sys.argv)>2: foriinsys.argv[2:]: file_types.append(i) #print(count_path,file_types) print(count_code_lines(count_path,file_types)) #print(count_file_lines("b.py"))
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。