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 相关文章推荐
用Python实现一个简单的能够上传下载的HTTP服务器
May 05 Python
python定时器(Timer)用法简单实例
Jun 04 Python
python数据分析数据标准化及离散化详解
Feb 26 Python
python 输出上个月的月末日期实例
Apr 11 Python
python实现比较文件内容异同
Jun 22 Python
python实现将一个数组逆序输出的方法
Jun 25 Python
Falsk 与 Django 过滤器的使用与区别详解
Jun 04 Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 Python
python使用 __init__初始化操作简单示例
Sep 26 Python
python实现高斯投影正反算方式
Jan 17 Python
Python三维绘图之Matplotlib库的使用方法
Sep 20 Python
Pytest allure 命令行参数的使用
Apr 18 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数组函数序列之array_combine() - 数组合并函数使用说明
2011/10/29 PHP
php判断表是否存在的方法
2015/06/18 PHP
PHP通过加锁实现并发情况下抢码功能
2016/08/10 PHP
php解决和避免form表单重复提交的几种方法
2016/08/31 PHP
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
JQuery 文本框使用小结
2010/05/22 Javascript
JSON 和 JavaScript eval使用说明
2010/06/13 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
js实现继承的5种方式
2015/12/01 Javascript
js判断文本框输入的内容是否为数字
2015/12/23 Javascript
纯JavaScript基于notie.js插件实现消息提示特效
2016/01/18 Javascript
JS锚点的设置与使用方法
2016/09/05 Javascript
详解angular用$sce服务来过滤HTML标签
2017/04/11 Javascript
微信小程序 实现点击添加移除class
2017/06/12 Javascript
微信通过页面(H5)直接打开本地app的解决方法
2017/09/09 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
[02:56]《DAC最前线》之国外战队抵达上海备战亚洲邀请赛
2015/01/28 DOTA
Python去掉字符串中空格的方法
2014/03/11 Python
如何高效使用Python字典的方法详解
2017/08/31 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
用python3 urllib破解有道翻译反爬虫机制详解
2019/08/14 Python
Python版中国省市经纬度
2020/02/11 Python
python:批量统计xml中各类目标的数量案例
2020/03/10 Python
传播学专业毕业生自荐信
2013/11/04 职场文书
2014年保险公司工作总结
2014/11/22 职场文书
小学新教师个人总结
2015/02/05 职场文书
大学四年个人总结
2015/03/03 职场文书
优质服务标语口号
2015/12/26 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
房屋买卖定金协议书
2016/03/21 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
php 原生分页
2021/04/01 PHP
MySQL派生表联表查询实战过程
2022/03/20 MySQL