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程序设计有所帮助。