发布于 2015-10-09 04:55:44 | 194 次阅读 | 评论: 0 | 来源: 网友投递
Python编程语言
Python 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。
本文实例讲述了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();