• 技术文章 >后端开发 >Python教程

    python实现统计代码行数的方法

    2016-06-06 11:17:17原创512
    本文实例讲述了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();
    
    

    希望本文所述对大家的Python程序设计有所帮助。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:python 统计 代码行数
    上一篇:Python3写入文件常用方法实例分析 下一篇:在Python中用get()方法获取字典键值的教程
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• 一文详解python生成器• Python自动化实践之筛选简历• 图文详解Python冒泡排序算法• Python 3.11中的最佳新功能和功能修复• Python接口自动化测试必备基础之http协议详解
    1/1

    PHP中文网