python实现的代码行数统计代码详解编程语言

''' 
      Author: liupengfei 
    Function: count lines of code in a folder iteratively 
Shell-format: cmd [dir] 
   Attention: default file encode is utf8 and default file type is java-source-file. But users can customize this script by just modifing global variables. 
''' 
import sys 
import os 
import codecs 
from _pyio import open 
totalCount = 0; 
fileType = '.java' 
descLineBegin = '//' 
descBlockBegin = r'/**' 
descBlockEnd = r'*/' 
fileEncode = 'utf-8' 
def main(): 
    DIR = os.getcwd() 
    if len(sys.argv) >= 2: 
        DIR = sys.argv[1] 
    if os.path.exists(DIR) and os.path.isdir(DIR): 
        print('target directory is %s' % DIR) 
        countDir(DIR) 
        print('total code line is %d' % totalCount) 
    else: 
        print('target should be a directory!') 
def isFileType(file): 
    return len(fileType) + file.find(fileType) == len(file) 
def countDir(DIR): 
    for file in os.listdir(DIR): 
        absPath = DIR + os.path.sep + file; 
        if os.path.exists(absPath): 
            if os.path.isdir(absPath): 
                countDir(absPath) 
            elif isFileType(absPath): 
                try: 
                    countFile(absPath) 
                except UnicodeDecodeError: 
                    print( 
                        '''encode of %s is different, which 
is not supported in this version!''' 
                        ) 
def countFile(file): 
    global totalCount 
    localCount = 0 
    isInBlockNow = False 
    f = codecs.open(file, 'r', fileEncode); 
    for line in f: 
        if (not isInBlockNow) and line.find(descLineBegin) == 0: 
            pass; 
        elif (not isInBlockNow) and line.find(descBlockBegin) >= 0: 
            if line.find(descBlockBegin) > 0: 
                localCount += 1 
            isInBlockNow = True; 
        elif isInBlockNow and line.find(descBlockEnd) >= 0: 
            if line.find(descBlockEnd) + len(descBlockEnd) < len(line): 
                localCount += 1 
            isInBlockNow = False; 
        elif (not isInBlockNow) and len(line.replace('//s+', '')) > 0: 
            localCount += 1 
    f.close() 
    totalCount += localCount 
    print('%s : %d' % (file, localCount)) 
if __name__ == '__main__': 
    main();

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/8347.html

(0)
上一篇 2021年7月18日
下一篇 2021年7月18日

相关推荐

发表回复

登录后才能评论