python实现代码统计程序
本文实例为大家分享了python实现代码统计程序的具体代码,供大家参考,具体内容如下
#encoding="utf-8" """ 统计代码行数 """ importsys importos defcount_file_line(path): """统计文件的有效行数""" countLine=0 #设置一个标志位,当遇到以"""或者'''开头或者结尾的时候,置为False flag=True #使用utf-8格式的编码方式读取文件,如果读取失败,将使用gbk编码方式读取文件 try: fp=open(path,"r",encoding="utf-8") encoding_type="utf-8" fp.close() except: encoding_type="gbk" withopen(path,"r",encoding=encoding_type)asfp: forlineinfp: #空行不统计 ifline.strip(): line=line.strip() #注意下面的这两个elif必须要前面,这样子当('"""')结束之后及时将flag置为True ifline.endswith('"""')andflag==False: flag=True continue ifline.endswith("'''")andflag==False: flag=True continue ifflag==False: continue ifline.startswith("#!")orline.startswith("#-*-")orline.startswith("#encoding"): countLine+=1 #如果以“#”号开头的,不统计 elifline.startswith("#"): continue #如果同时以("'''")或者('"""')开头或者结尾(比如:"""aaa"""),那么不统计 elifline.startswith('"""')andline.endswith('"""')andline!='"""': continue elifline.startswith("'''")andline.endswith("'''")andline!="'''": continue #如果以("'''")或者('"""')开头或者结尾(比如:aaa"""或者"""bbb),那么不统计 #注意下面的这两个elif必须要放后面 elifline.startswith('"""')andflag==True: flag=False continue elifline.startswith("'''")andflag==True: flag=False continue else: countLine+=1 returncountLine defcount_codes(path,file_types=[]): """统计所有文件代码行""" #判断path是目录还是文件,如果是目录的话,遍历目录下所有的文件 ifnotos.path.exists(path): print("您输入的路径不存在!") return0 countTotalLine=0 file_paths={} ifos.path.isdir(path): forroot,dirs,filesinos.walk(path): fornameinfiles: ifnotfile_types: file_types=["txt","py"] #print(file_types) ifos.path.splitext(name)[1][1:]infile_types: file_path=os.path.normpath(os.path.join(root,name)) #print(file_path) file_lines=count_file_line(file_path) countTotalLine+=file_lines file_paths[file_path]=file_lines else: ifnotfile_types: file_types=["txt","py"] ifos.path.splitext(path)[1][1:]infile_types: countTotalLine=count_file_line(path) file_paths[path]=count_file_line(path) returncountTotalLine,file_paths if__name__=="__main__": #打印出命令行输入的参数 #print(sys.argv) iflen(sys.argv)<2: print("请输入路径!") sys.exit() path=sys.argv[1] #print(path) file_types=sys.argv[2:] #print(file_types) print(count_codes(path,file_types))
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。