ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码

代码统计工具-python版本

来源:网络整理     时间:2014-12-11     关键词:

本篇文章主要介绍了"代码统计工具-python版本",主要涉及到方面的内容,对于Javascriptjrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下: 在网上搜了相关代码统计工具,发现统计python代码的工具貌还没有出现,遂小试一把自己编写一版python代码统计工具。语言:python废话少说上代码 cod...

在网上搜了相关代码统计工具,发现统计python代码的工具貌似还没有出现,遂小试一把自己编写一版python代码统计工具。
语言:python
废话少说上代码

coding=utf-8
u"""
User: Jerry.Fang
Date: 14-6-21
"""
import os

# Scan all python files name and path.
def _scan_file_by_type(file_path, last_dir, file_type, file_list):

    if last_dir == '':
        full_path = file_path
    else:
        full_path = file_path + '/' + last_dir

    if os.path.isdir(full_path):
        _list_dir = os.listdir(full_path)
        for _ele in _list_dir:
            _scan_file_by_type(full_path, _ele, file_type, file_list)
    else:
        if ('.' + file_type) == last_dir[-3:]:
            file_list.append({
                'path': file_path + '/',
                'name': last_dir
            })

def stat_py_files(project_path):

    # Get files list.
    py_file_list = list()
    _scan_file_by_type(project_path, '', 'py', py_file_list)

    # Start to statics files line.
    comment_num = 0
    blank_num = 0
    code_num = 0
    for py_file in py_file_list:
        py_file_handle = file(py_file['path'] + '/' + py_file['name'])

        last_comment_header = None
        is_comment_start = False
        while True:
            _line = py_file_handle.readline()
            if _line:

                # comment ''' line.
                mark_num = _line.count("'''")
                if mark_num:
                    if mark_num % 2 == 1 and (last_comment_header == "'''" or last_comment_header is None):
                        is_comment_start = False if is_comment_start else True
                        if is_comment_start:
                            last_comment_header = "'''"
                        else:
                            last_comment_header = None
                    comment_num += 1
                    continue

                # comment """ line.
                mark_num = _line.count('"""')
                if mark_num:
                    if mark_num % 2 == 1 and (last_comment_header == '"""' or last_comment_header is None):
                        is_comment_start = False if is_comment_start else True
                        if is_comment_start:
                            last_comment_header = '"""'
                        else:
                            last_comment_header = None
                    comment_num += 1
                    continue

                # comment # line.
                mark_num = _line.count('#')
                if mark_num:
                    comment_num += 1
                    continue

                # blank line.
                mark_num = _line.count(' ') + _line.count('\n')
                if mark_num == len(_line):
                    blank_num += 1
                    continue

                # Code Line.
                if is_comment_start is False:
                    code_num += 1
                else:
                    comment_num += 1
            else:
                print '%s...OK' % py_file['name']
                break

    total_line = comment_num + blank_num + code_num
    print '****** Result ******'
    print 'Total    : %d' % total_line
    print 'Comment  : %d  %.2f %%' % (comment_num, float(comment_num)*100/float(total_line))
    print 'Blank    : %d  %.2f %%' % (blank_num, float(blank_num)*100/float(total_line))
    print 'Code     : %d  %.2f %%' % (code_num, float(code_num)*100/float(total_line))
    print '********************'

if __name__ == '__main__':
    stat_py_files('F:\personal\python\test_project')
    pass

其实代码统计不外乎就是2点

1、扫描当前路径下所有相关文件

2、统计时候区分 空白行、注释行和代码行

同理,举一反三可以写出Javascript代码统计方法:

def stat_js_files(project_path):

     # Get files list.
    py_file_list = list()
    _scan_file_by_type(project_path, '', 'js', py_file_list)

    # Start to statics files line.
    comment_num = 0
    blank_num = 0
    code_num = 0
    for py_file in py_file_list:
        py_file_handle = file(py_file['path'] + '/' + py_file['name'])

        is_comment_start = False
        while True:
            _line = py_file_handle.readline()
            if _line:

                # comment /* line.
                mark_num = _line.count("/*")
                if mark_num:
                    is_comment_start = True
                    comment_num += 1
                    continue

                # comment */ line.
                mark_num = _line.count("*/")
                if mark_num:
                    is_comment_start = False
                    comment_num += 1
                    continue

                # comment # line.
                mark_num = _line.count('//')
                if mark_num:
                    comment_num += 1
                    continue

                # blank line.
                mark_num = _line.count(' ') + _line.count('\n')
                if mark_num == len(_line):
                    blank_num += 1
                    continue

                # Code Line.
                if is_comment_start is False:
                    code_num += 1
                else:
                    comment_num += 1
            else:
                print '%s...OK' % py_file['name']
                break

    total_line = comment_num + blank_num + code_num
    print '****** Result ******'
    print 'Total    : %d' % total_line
    print 'Comment  : %d  %.2f %%' % (comment_num, float(comment_num)*100/float(total_line))
    print 'Blank    : %d  %.2f %%' % (blank_num, float(blank_num)*100/float(total_line))
    print 'Code     : %d  %.2f %%' % (code_num, float(code_num)*100/float(total_line))
    print '********************'

小结:

工具写得比较简单,有些特殊情况没有进行细分,例如:一行既有代码又有注释的时候统一按照注释行统计了(貌似有点小亏)

以上就介绍了代码统计工具-python版本,包括了方面的内容,希望对Javascriptjrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播有兴趣的朋友有所帮助。

本文网址链接:http://www.codes51.com/article/detail_98643.html

相关图片

相关文章