python实现统计代码行数的方法
本文实例讲述了python实现统计代码行数的方法。分享给大家供大家参考。具体实现方法如下:
''' Author:liupengfei Function:countlinesofcodeinafolderiteratively Shell-format:cmd[dir] Attention:defaultfileencodeisutf8anddefaultfiletypeisjava-source-file.Butuserscancustomizethisscriptbyjustmodifingglobalvariables. ''' importsys importos importcodecs from_pyioimportopen totalCount=0; fileType='.java' descLineBegin='//' descBlockBegin=r'/**' descBlockEnd=r'*/' fileEncode='utf-8' defmain(): DIR=os.getcwd() iflen(sys.argv)>=2: DIR=sys.argv[1] ifos.path.exists(DIR)andos.path.isdir(DIR): print('targetdirectoryis%s'%DIR) countDir(DIR) print('totalcodelineis%d'%totalCount) else: print('targetshouldbeadirectory!') defisFileType(file): returnlen(fileType)+file.find(fileType)==len(file) defcountDir(DIR): forfileinos.listdir(DIR): absPath=DIR+os.path.sep+file; ifos.path.exists(absPath): ifos.path.isdir(absPath): countDir(absPath) elifisFileType(absPath): try: countFile(absPath) exceptUnicodeDecodeError: print( '''encodeof%sisdifferent,which isnotsupportedinthisversion!''' ) defcountFile(file): globaltotalCount localCount=0 isInBlockNow=False f=codecs.open(file,'r',fileEncode); forlineinf: if(notisInBlockNow)andline.find(descLineBegin)==0: pass; elif(notisInBlockNow)andline.find(descBlockBegin)>=0: ifline.find(descBlockBegin)>0: localCount+=1 isInBlockNow=True; elifisInBlockNowandline.find(descBlockEnd)>=0: ifline.find(descBlockEnd)+len(descBlockEnd)<len(line): localCount+=1 isInBlockNow=False; elif(notisInBlockNow)andlen(line.replace('\\s+',''))>0: localCount+=1 f.close() totalCount+=localCount print('%s:%d'%(file,localCount)) if__name__=='__main__': main();
希望本文所述对大家的Python程序设计有所帮助。