分享

python实现代码行数统计

 Levy_X 2017-08-01

第一步:我们应该定义一个static统计函数,要求函数能对指定路径,如果是目录能够递归访问,如果是文件就对文件进行行数计算。

import os def static(path = '.'): if os.path.isdir(path): for  x in os.listdir(path): childdir = os.path.join(path, x) if os.path.isdir(childdir): static(childdir) elif os.path.isfile(childdir): clacFilelines(childdir) elif os.path.isfile(path): clacFilelines(path) return

第二步:实现文件行数计算函数功能,统计文本文件行数,过滤空白行(代码注释涉及到很多情况暂时不处理),并将统计结果保存在以文件扩展名为key的字典result里。

def clacFilelines(filepath): vpath = os.path.splitext(filepath) ext = vpath[1].lower() if not ext.strip(): return False if not isTextFile(ext): return False lines = 0 with open(filepath, 'rU'as f: filelist = f.readlines() for line in filelist: if not line.strip(): continue lines  = 1 if ext in result: result[ext]  = lines else: result[ext] = lines print 'file:%s lines:%d' %(filepath, lines) return True

第三步:实现文件过滤功能函数,因为文本分为文本文件和二进制文件,对于不符号要求的文件不计算在内。以下是一种较简单的实现方式:

def isTextFile(ext): tExt = ('.c''.cpp''.h''.py''.htm''.html''.txt''.lua''.ini''.hpp''.lua''.cfg') if ext in tExt: return True return False

完成以上三个步骤,一个简单的代码统计工具实现了,完整代码如下:

#!/usr/bin/python #-*- coding: utf-8 -*- import os result = {} def static(path = '.'): if os.path.isdir(path): for  x in os.listdir(path): childdir = os.path.join(path, x) if os.path.isdir(childdir): static(childdir) elif os.path.isfile(childdir): clacFilelines(childdir) elif os.path.isfile(path): clacFilelines(path) return def clacFilelines(filepath): vpath = os.path.splitext(filepath) ext = vpath[1].lower() if not ext.strip(): return False if not isTextFile(ext): return False lines = 0 with open(filepath, 'rU'as f: filelist = f.readlines() for line in filelist: if not line.strip(): continue lines  = 1 if ext in result: result[ext]  = lines else: result[ext] = lines print 'file:%s lines:%d' %(filepath, lines) return True def isTextFile(ext): tExt = ('.c''.cpp''.h''.py''.htm''.html''.txt''.lua''.ini''.hpp''.lua''.cfg') if ext in tExt: return True return False if __name__ == '__main__': print '***********start code line static*************' static() print '****************static result*****************' sum = 0 for k,v in result.iteritems(): sum  = v print '[%s]: %d lines' %(k, v) print 'total: %d lines' %sum print '******************static end******************'

运行结果:

***********start code line static************* file:.\class.py lines:118 file:.\hello.py lines:483 file:.\metaclass.py lines:72 file:.\process.py lines:28 file:.\static_code_line.py lines:50 ****************static result***************** [.py]: 751 lines total: 751 lines ******************static end****************** [Finished in 0.4s]

前后总共花了15min左右就完成了这个小程序,突然有点喜欢上python了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多