今天接到一个电话面试,对方问我在一个项目中维护了多少行代码。

我懵逼了,从来没有统计过啊,怎么还会有这种需求?

当时一脸茫然的想了想,回答了一个,呃...差不多两千多行吧...感觉很心虚

挂完电话之后大概看了一下最近的一个项目,光其中某一个顶层文件就一千多行了好吧,感觉自己回答的好low

但是又不能自己挨个去统计每个文件中到底有多少行代码啊,还要去掉注释和空格,一个文件一个文件的去计算,这显然不是程序员的风格

所以又不务正业了一下,拿python写了个小程序,用来统计某个目录下一个有多少.v文件,有多少行代码。

当然,子目录也是可以统计的。

用法:把以下代码复制到新建的py文件中,将该文件放到你想统计的工程的根目录,运行一下,统计结果会生成到该PY文件的同一级目录,文件名为"code_line_count.txt"

代码如下:

 # -*- coding: utf-8 -*-
 import sys
 import os
 import codecs

 exts = ['.v','.vhd']
 def read_line_count(fname):
     count = 0
     with open('code_line_count.txt','a') as f:
         f.write('fname:%s\n' % fname)
     with open(fname,'r',encoding='utf8') as f:
         for file_line in f.readlines():
             file_line = file_line.strip()
             if not len(file_line) or file_line.startswith('//'):
                 continue
             count += 1
     with open('code_line_count.txt','a') as f:
         f.write('line count::%s\n' % count)
     return count

 if __name__ == '__main__':
     with open('code_line_count.txt','w') as f:
         f.write('\n')
     count = 0
     fcount = 0
     for root,dirs,files in os.walk(os.getcwd()):
         for f in files:
             # Check the sub directorys
             print(f)
             fname = (root + '\\'+ f).lower()
             if os.path.splitext(f)[1]:
                 ext = f[f.rindex('.'):]
             try:
                 if(exts.index(ext) >= 0):
                     fcount += 1
                     c = read_line_count(fname)
                     count += c
                     with open('code_line_count.txt','a') as f:
                         f.write('total count:%s\n' % count)
             except:
                 pass

     with open('code_line_count.txt','a') as f:
         f.write('\n')
         f.write('--------------------------------------\n')
         f.write('total file count:%d\n' % fcount)
         f.write('total line count:%d\n' % count)

部分结果如下:

两万行被我说成了两千行,哭晕在厕所

用python3统计代码行数的更多相关文章

  1. Eclipse统计代码行数

    开发过程中,经常需要统计代码行数,这时可以通过Eclipse的Search功能来实现. 步骤: 1.在Package Explorer中选中需要统计的包: 2.单击菜单Search-->File ...

  2. 在Flash Builder或者Eclipse统计代码行数的方法

    在Flash  Builder或者Eclipse统计代码行数的方法如下图菜单栏--搜索--搜索文件

  3. 【Linux】常用命令-统计代码行数

    公司人员流动大,经常有新的维护任务,交接时喜欢看看新来的模块的代码量,那么问题来了, 如何统计代码行数? 1,最先想到的肯定是 wc. wc -l *.h 将查看[当前目录]下头文件的代码行数,输出结 ...

  4. c#统计代码行数

    小编,已经快学了两年编程了.昨天突发奇想,想统计下这些年到底写过多少行代码,于是做了一个这个小程序来统计代码行数.老规矩,先上图. 比较惭愧,写了两年只有2万多行.那我们还是进入下一项吧. 界面搭建我 ...

  5. 图文介绍如何在Eclipse统计代码行数(转)

    使用Eclipse可以方便的统计工程或文件的代码行数,方法如下: 1.点击要统计的项目或许文件夹,在菜单栏点击Search,然后点击File... 2.选中正则表达式(Regular expressi ...

  6. 图文介绍如何在Eclipse统计代码行数

    使用Eclipse可以方便的统计工程或文件的代码行数,方法如下: 1.点击要统计的项目或许文件夹,在菜单栏点击Search,然后点击File... 2.选中正则表达式(Regular expressi ...

  7. VS2010统计代码行数 [转]

    按CTRL+SHIFT+F (Find in files),勾上支持正则表达式,然后输入搜索内容:  ^:b*[^:b#/]+.*$ 以上表达式的统计可做到:#开头 和 /开头 或者 空行 都不计入代 ...

  8. Visual Studio VS2010统计代码行数(转载)

    本文转自:http://blog.csdn.net/zhouworld16/article/details/9292851 在网上看到别人用的方法: 按CTRL+SHIFT+F (Find in fi ...

  9. ios统计代码行数

    要统计ios开发代码,包括头文件的,终端命令进入项目目录下,命令如下 列出每个文件的行数: find . -name "*.m" -or -name "*.h" ...

随机推荐

  1. 纪录我的iOS学习之路

    学习资料的网址 田伟宇(Casa Taloyum)有几篇介绍iOS架构的文章,一级棒!原博客链接. iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方 ...

  2. C# - 多线程 之 信号系统

    基础概览 多线程之信号系统命名空间 using System.Threading; 线程同步类的继承层次关系图 终止状态和非终止状态 在终止状态下,被WaitOne()阻塞的线程会逐个得到释放.如果一 ...

  3. LoadRunner 函数之lr_xml_find

    实例如: char *xml_input = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>&qu ...

  4. HtmlAgilityPack 学习和笔记

    介绍: http://www.cnblogs.com/bomo/archive/2013/01/28/2879361.html 实战 c#获取外网ip 网址:http://ip138.com/ 如图: ...

  5. Chrome 控制台使用大全

    Chrome的开发者工具已经强大到没朋友的地步了,特别是功能丰富界面友好的console 一.console.log 将输出到控制台的信息进行分类会更好: console.log();    普通信息 ...

  6. discuz中方法

    discuz中检验是否是邮箱 function isemail($email) { && strlen($email) <= && preg_match(&quo ...

  7. C语言面试题汇总之一

    C语言面试题汇总之一 1.static有什么用途?(请至少说明两种) l 限制变量的作用域: 设置变量的存储域. 2.引用和指针有什么区别? 引用必须被初始化,指针不必: 引用初始化以后不能被改变,指 ...

  8. CGContext 的一些工具方法

    /* *设置虚线 *param context CGContext *param context CGContext *param lineDashLengths 如: const CGFloat l ...

  9. 更改电脑与eclpse热键冲突

  10. block的传值简单示例仅供参考,大牛勿喷

    #import "ViewController.h" typedef void(^sumBlock)(int s);//声明为一个类型; /** *  用声明的block类型 su ...