python实现的源码行数统计源码

把代码过程比较常用的内容做个备份,下面的代码是关于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'

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();

你可能感兴趣的:(python实现的源码行数统计源码)