python实现代码行的统计

最近闲来无事写了一个统计C或者C++代码行数的程序,主要用到了python以及正则表达式

#-*-coding:utf-8
#!/usr/bin/python
import re
import os
import sys
‘‘‘get the file or dir in one path‘‘‘
def getfilename(path):
    if os.path.exists(path):
        filelist = os.listdir(path)
    return filelist

‘‘‘get the file with the ending of .cpp‘‘‘
def isfile(filelist):
    ‘‘‘match the that end with .cpp‘‘‘
    pattern = re.compile(r‘^\w.{0,}cpp$‘)
    filetemp = []
    for file in filelist:
        if os.path.isfile("F:\\"+file)and pattern.match(file):
            filetemp.append("F:\\"+file)
    return filetemp

‘‘‘caculate the codeline and the commentline‘‘‘
def caculate(filelist):
    ‘‘‘match the beginning of /* and the ending of */‘‘‘
    fullpattern = re.compile(r"^(/\*)(.+)(\*/$)")
    ‘‘‘only match the beginning of /*‘‘‘
    beginpattern = re.compile(r"^(/\*)")
    ‘‘‘only match the ending of */‘‘‘
    endpattern = re.compile(r"\*/$")
    ‘‘‘match the blank line‘‘‘
    pattern = re.compile("\\s+$")
    comentline = 0
    codeline = 0
    filenum = 0
    for file in filelist:
        try:
            f = open(file,‘r‘)
        except:
            print "open file error"
        filenum = filenum + 1
        print "begin to caculate the" + str(filenum) + "‘s" + " file"
        flag = 0
        while 1:
            line = f.readline()
            if not line:
                break
            if pattern.match(line):
                continue
            ‘‘‘remove the blank line‘‘‘
            line2 = line.strip()
            if fullpattern.match(line2):
                comentline = comentline + 1
            elif beginpattern.match(line2):
                comentline = comentline + 1
                flag = 1
            elif endpattern.match(line2):
                comentline = comentline + 1
                flag = 0
            elif flag == 1:
                comentline = comentline +1
            else:
                codeline = codeline + 1
        try:
            f.close()
        except:
            print "close file error"

    return (comentline, codeline)

if __name__ == "__main__":

        dirlist =  getfilename("F:\\")
        filelist = isfile(dirlist)
        if filelist:
            print " find C or C++ file"
        else:
            print "not find C or C++ file"
            sys.exit(0)
        (comentline,codeline) = caculate(filelist)
        print "comenline is: " + str(comentline)
        print "codeline is: " + str(codeline)

测试文件为:

测试结果:

从上面可以看到我我们统计了两个文件,之所以少一个是因为其中一个文件的后缀为.c而程序只会匹配 以.cpp结尾的文件,统计的文件一个为空。所以我们的结果只是其中一个文件(结果是正确没有注释,不算空行有34条代码)当然想统计空行也很容易(正则表达式上面已经给出只需做稍微修改即可

python实现代码行的统计,布布扣,bubuko.com

时间: 2025-01-14 16:43:09

python实现代码行的统计的相关文章

Python实现代码行数统计工具

我们经常想要统计项目的代码行数,但是如果想统计功能比较完善可能就不是那么简单了, 今天我们来看一下如何用python来实现一个代码行统计工具. 思路:首先获取所有文件,然后统计每个文件中代码的行数,最后将行数相加. 实现的功能: 统计每个文件的行数: 统计总行数: 统计运行时间: 支持指定统计文件类型,排除不想统计的文件类型: 递归统计文件夹下包括子文件件下的文件的行数: 排除空行: # coding=utf-8 import os import time basedir = '/root/sc

推荐一个代码行数统计工具cloc

代码行数统计工具cloc,它不但能统计代码行数,还能自动过滤掉代码中的注释,使用起来也很方便,强力推荐. 安装很方便,Ubuntu上直接udo apt-get install cloc就可以了 下面用mysql来做个例子吧,首先进入mysql的源代码文件夹: [email protected] ~/aproject $ cd mysql-5.6.19/ [email protected] ~/aproject/mysql-5.6.19 $ cloc . defined(%hash) is dep

代码行数统计

/** * Copyright ? 2015 All rights reserved. */ package cn.yufu.system.tools; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList;

Android Studio代码行数统计插件Statistics

Android Studio 是没有提提供统计代码全部行数的功能的,但是对于开发者来说,这个功能确实必备的,Statistic统计代码行数非常方便,也很详细. 1,首先肯定是将插件下载下来,下载地址:https://plugins.jetbrains.com/plugin/4509 2,下载下来之后我们将插件安装到AS上面: 进入设置界面Setting之后点击plugins,如下图所示,显示的是已经安装的插件名称,我们将下载的插件安装,点击下面按钮: 点击之后,选择已经下载好的plugins插件

代码行数统计工具

import java.io.*; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created with IntelliJ IDEA. * User: 焦一平 * Date: 2015/6/3 * Time: 15:56 * To change this template use File | Settings | File Templates. */ public class CountLineNu

代码行数统计(mac)

如何统计自己的代码量?下面介绍两个方法: 一.cloc 1.首先,安装homebrew,已安装的请跳过. 打开终端工具Terminal,输入下列命令.过程中会让你按RETURN键以及输入mac桌面密码,按照提示进行操作即可: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 这里需要注意的是ruturn键即是enter键 2.利用homebrew下载并安装c

文件行数和代码行数统计

统计当前目录下,py文件数量:    find . -name "*.py" |wc -l统计当前目录下,所有py文件行数:    find . -name "*.py" |xargs cat|wc -l统计当前目录下,所有py文件行数,并过滤空行:    find . -name "*.py" |xargs cat|grep -v ^$|wc -l 统计某文件夹下文件的个数 ls -l |grep "^-"|wc -l 统计

xcode代码行数统计

进入终端 cd 路径 进入项目根目录 输入下面的命令,显示总行数(不包含空行,包括注释和应用第三方类) find . -name "*.m" -or -name "*.h" -or -name "*.xib" -or -name "*.c" |xargs grep -v "^$"|wc -l 输入下面的命令,显示各个文件行数以及总行数(包含空行,包括注释和应用第三方类) find . -name "

Visual Studio 中粗略的代码行数统计

在VS中, Ctrl + Shift +  F 调出查询窗, 输入正则表达式, 勾选"Use Regular Expressions", 选择好目标的文件类型, 点击Find All 自VS2012版本后: ^(?([^\r\n])\s)*[^\s+?/]+[^\n]*$ (?([^\r\n])\s)  代表any white space character ^\s+?/ 代表以/开头的行,即注释行 ^\n  代表行结尾 VS2012之前: ^:b*[^:b#/]+.*$ MSDN上关