Python实现一个代码行数统计工具

我们经常想要统计项目的代码行数,但是如果想统计功能比较完善可能就不是那么简单了, 今天我们来看一下如何用python来实现一个代码行统计工具。

思路:首先获取所有文件,然后统计每个文件中代码的行数,最后将行数相加.

实现的功能:

统计每个文件的行数;

统计总行数;

统计运行时间;

支持指定统计文件类型,排除不想统计的文件类型;

递归统计文件夹下包括子文件件下的文件的行数;

排除空行;

# coding=utf-8
import os
import time
basedir = '/root/script'
filelists = []
# 指定想要统计的文件类型
whitelist = ['php', 'py']
#遍历文件, 递归遍历文件夹中的所有
def getFile(basedir):
    global filelists
    for parent,dirnames,filenames in os.walk(basedir):
        #for dirname in dirnames:
        #    getFile(os.path.join(parent,dirname)) #递归
        for filename in filenames:
            ext = filename.split('.')[-1]
            #只统计指定的文件类型,略过一些log和cache文件
            if ext in whitelist:
                filelists.append(os.path.join(parent,filename))
#统计一个文件的行数
def countLine(fname):
    count = 0
    for file_line in open(fname).xreadlines():
        if file_line != '' and file_line != '\n': #过滤掉空行
            count += 1
    print fname + '----' , count
    return count
if __name__ == '__main__' :
    startTime = time.clock()
    getFile(basedir)
    totalline = 0
    for filelist in filelists:
        totalline = totalline + countLine(filelist)
    print 'total lines:',totalline
    print 'Done! Cost Time: %0.2f second' % (time.clock() - startTime)

结果:

[root@pythontab script]# python countCodeLine.py 
/root/script/test/gametest.php---- 16
/root/script/smtp.php---- 284
/root/script/gametest.php---- 16
/root/script/countCodeLine.py---- 33
/root/script/sendmail.php---- 17
/root/script/test/gametest.php---- 16
total lines: 382
Done! Cost Time: 0.00 second
[root@pythontab script]#

统计php和python文件,非常方便。

其实大家还可以在此基础上进行改进,比如:排除注释行等等。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏容器云生态

shell脚本实例

'使用sed 去除以空格开头的行,第一个sort进行整理输出,uniq -c进行统计,sort -rn进行从大到小排列 # cat cat.ip | awk -...

2636
来自专栏微信公众号:Java团长

版本号命名指南

从上可以看出,不同的软件版本号风格各异,随着系统的规模越大,依赖的软件越多,如果这些软件没有遵循一套规范的命名风格,容易造成 Dependency Hell。所...

1111
来自专栏性能与架构

正则表达式分析工具

下面这个正则表达式是什么意思? ((d{3,4})|d{3,4}-)?d{7,8}$ 这是一个很简单的表达式,相信很多同学都不能马上明白,需要认真看一会儿 ...

3686
来自专栏xcywt

《Linux命令行与shell脚本编程大全》第十九章 初识sed和gawk

这两个工具能够极大简化需要进行的数据处理任务。 19.1 文本处理 能轻松实现自动格式化、插入、修改或删除文本元素的简单命令行编辑。 sed和gawk就具备上述...

2055
来自专栏流柯技术学院

Jmeter常用函数之__CSVRead使用

__CSVRead函数用于对脚本进行参数话,当脚本中不同变量需要不同参数值时,可以考虑__CSVRead函数。 以登录的用户名、密码为例:实际进行压力测试时,...

971
来自专栏LhWorld哥陪你聊算法

Nginx篇--解读nginx配置

之前讲解了Nginx的源码安装与加载到系统服务中去,http://www.cnblogs.com/LHWorldBlog/p/8298226.html 今天详细...

1563
来自专栏debugeeker的专栏

《coredump问题原理探究》windows版8.7节堆布局heap corruption第二个例子

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

932
来自专栏james大数据架构

springmvc注入类 NoUniqueBeanDefinitionException: No qualifying bean of type [] is defined: expected sin

在springmvc中注入服务时用@Service 当有两个实现类时都标明@Service后则会出现异常: nested exception is org.sp...

2245
来自专栏木头编程 - moTzxx

PHP 无限级分类数据库设计及实现

4342
来自专栏用户2442861的专栏

linux split join paste uniq tee sort 工作中文本操作常用方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details...

1051

扫码关注云+社区

领取腾讯云代金券