• 使用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(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确实是件很惬意的事。
  • 相关阅读:
    Django中使用Celery实现异步任务队列
    使用Pyenv + pipenv来管理python版本和虚拟环境
    Django设置DEBUG=False后静态文件无法加载
    翕的来历
    Dubbo:基本原理机制
    数据库事务特性及隔离机制再到spring事务管理
    通过rocketmq思考一下mq的设计取舍
    redis的一些特性
    redis的快速机制与数据类型
    Zookeeper选举算法原理
  • 原文地址:https://www.cnblogs.com/dahuzizyd/p/python_linecount.html
Copyright © 2020-2023  润新知