Python 代码行数自动统计源码,由玩蛇网收集整理。
只用到了2个常用的Python标准库中的os和sys模块就解决了代码行数统计。
可能是因为这段时间在做的一个Python项目,用的是一个公司内部的IDE环境,而这个IDE环境产生的py代码并不是以文本方式存储,都是放在二进制文件里面的。
由于这门语言外界几乎接触不到,所以没有针对它的代码统计程序。一个模块完成后要统计代码行数会很困难的,要统计的话只能手工来操作,这不符合我们程序员的一惯风格。
在这期间我一直在关注python语言,但是还没有动手真正的写python程序 。今天就利用中午休息的时间写了一个简单的代码统计程序。对输入路径作递归查找代码文件,对每一个代码文件计算注释行数、空行数、真正的代码行数。
统计代码行数Python代码如下:
#coding=utf-8
#iplaypython.py
import sys;
import os;
class LineCount:
def trim(self,docstring):
if not docstring:
return ''
lines = docstring.expandtabs().splitlines()
indent = sys.maxint
for line in lines[1:]:
stripped = line.lstrip()
if stripped:
indent = min(indent, len(line) - len(stripped))
trimmed = [lines[0].strip()]
if indent
for line in lines[1:]:
trimmed.append(line[indent:].rstrip())
while trimmed and not trimmed[-1]:
trimmed.pop()
while trimmed and not trimmed[0]:
trimmed.pop(0)
return '\n'.join(trimmed)
def FileLineCount(self,filename):
(filepath,tempfilename) = os.path.split(filename);
(shotname,extension) = os.path.splitext(tempfilename);
if extension == '.txt' or extension == '.hol' : # file type
file = open(filename,'r');
self.sourceFileCount += 1;
allLines = file.readlines();
file.close();
lineCount =0;
commentCount = 0;
blankCount = 0;
codeCount = 0;
for eachLine in allLines:
if eachLine != " " :
eachLine = eachLine.replace(" ",""); #remove space
eachLine = self.trim(eachLine); #remove tabIndent
if eachLine.find('--') == 0 : #LINECOMMENT
commentCount += 1;
else :
if eachLine == "":
blankCount += 1;
else :
codeCount += 1;
lineCount = lineCount + 1;
self.all += lineCount;
self.allComment += commentCount;
self.allBlank += blankCount;
self.allSource += codeCount;
print filename;
print ' Total :',lineCount ;
print ' Comment :',commentCount;
print ' Blank :',blankCount;
print ' Source :',codeCount;
def CalulateCodeCount(self,filename):
if os.path.isdir(filename) :
if not filename.endswith('\\'):
filename += '\\';
for file in os.listdir(filename):
if os.path.isdir(filename + file):
self.CalulateCodeCount(filename + file);
else:
self.FileLineCount(filename + file);
else:
self.FileLineCount(filename);
# Open File
def __init__(self):
self.all = 0;
self.allComment =0;
self.allBlank = 0;
self.allSource = 0;
self.sourceFileCount = 0;
filename = raw_input('Enter file name: ');
self.CalulateCodeCount(filename);
if self.sourceFileCount == 0 :
print 'No Code File';
pass;
print '\n';
print '***************** All Files **********************';
print ' Files :',self.sourceFileCount;
print ' Total :',self.all;
print ' Comment :',self.allComment;
print ' Blank :',self.allBlank;
print ' Source :',self.allSource;
print '****************************************************';
myLineCount = LineCount();
我们看到代码中 extension == '.txt' or extension == '.hol'这句代码是用来判定文件的后缀名,可以确定是否要计算代码行数。
if eachLine.find('--') == 0 :是用来判定当前行是不是单行注释,为了能在其他机器上运行,使用了py2exe来把python脚本生成可执行的exe。
from distutils.core import setup
import py2exe
setup(
version = "0.0.1",
description = "LineCount",
name = "LineCount",
console = ["LineCount.py"],
)
玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/code/c137.html
相关文章 Recommend