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


Posted in Python onMay 22, 2015

本文实例讲述了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程序设计有所帮助。

Python 相关文章推荐
下载安装setuptool和pip linux安装pip    
Jan 24 Python
Python3实现统计单词表中每个字母出现频率的方法示例
Jan 28 Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
Feb 21 Python
Python socket模块ftp传输文件过程解析
Nov 05 Python
解决Pycharm 导入其他文件夹源码的2种方法
Feb 12 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
Mar 06 Python
Python短信轰炸的代码
Mar 25 Python
Pandas的Apply函数具体使用
Jul 21 Python
python安装及变量名介绍详解
Dec 12 Python
python常见的占位符总结及用法
Jul 02 Python
python 管理系统实现mysql交互的示例代码
Dec 06 Python
Pandas实现批量拆分与合并Excel的示例代码
May 30 Python
在Python中处理日期和时间的基本知识点整理汇总
May 22 #Python
python使用PIL模块实现给图片打水印的方法
May 22 #Python
python实现读取命令行参数的方法
May 22 #Python
Python中返回字典键的值的values()方法使用
May 22 #Python
python复制文件的方法实例详解
May 22 #Python
在Python中操作字典之update()方法的使用
May 22 #Python
python判断图片宽度和高度后删除图片的方法
May 22 #Python
You might like
php 文本文件的读取效率
2012/02/10 PHP
php制作动态随机验证码
2015/02/12 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
2013/01/27 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
浅谈node.js 命令行工具(cli)
2018/05/10 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
Python利用socket模块开发简单的端口扫描工具的实现
2021/01/27 Python
总结30个CSS3选择器
2017/04/13 HTML / CSS
html5 viewport使用方法示例详解
2013/12/02 HTML / CSS
伦敦的高级牛仔布专家:Trilogy
2018/08/06 全球购物
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
班组建设经验交流材料
2014/05/12 职场文书
岗位明星事迹材料
2014/05/18 职场文书
交通事故委托书范本精选
2014/10/04 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
交通事故协议书范文
2014/10/23 职场文书
中学教师个人总结
2015/02/10 职场文书
导游词之西递宏村
2019/12/10 职场文书
Golang数据类型和相互转换
2022/04/12 Golang
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python