python显示代码行数_python实现代码行数统计

第一步:我们应该定义一个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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值