使用python写的代码行数统计程序

原文见: 使用python写的代码行数统计程序
因为最近在作的项目很特殊,所使用的语言是一个公司内部的IDE环境,而这个IDE所产生的代码并不是以文本方式存放的,都是放在二进制文件中,而且由于 这门语言外界几乎接触不到,所以没有针对它的代码统计程序,当一个模块完成后要统计代码行数会很困难,要统计的话必须先把代码编辑器中的内容拷贝到一个文 本类型的文件中。
正好一直在关注python,还没有用python写过程序,今天就利用中午休息的时间写了一个简单的代码统计程序。
对输入的路径作递归,查找代码文件,对每一个代码文件计算它的注释行数,空行数,真正的代码行数。
自己用的程序,就写的粗糙了,也没加异常处理。
主要的python脚本文件LineCount.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  <  sys.maxint:
            
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(self,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,setup.py脚本内容如下:
from  distutils.core  import  setup
import  py2exe

setup(
   
    version 
=   " 0.0.1 " ,
    description 
=   " LineCount " ,
    name 
=   " LineCount " ,

    console 
=  [ " LineCount.py " ],
    )

不过生成exe后程序臃肿很多,有3M多。
感觉使用python确实是件很惬意的事。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值