清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | ''' 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(); |