Python小工具:统计代码行数

本身代码难度不大,就是一个心血来潮做的小玩意

功能介绍

  1. 实现对于指定的后缀文件进行行数统计
  2. 可以忽略指定的文件夹,对于一些IDE自动生成的代码可以进行忽略(默认忽略二进制文件)
  3. 对于文件创建时间进行统计

Todo_List

  1. 把忽略文件夹的功能支持正则,现在的忽略功能有点僵硬
  2. 对于结果统计有更好的数据统计页面,比如画出一个饼图或柱状图之类的

代码:

import os,sys,time
def get_year(now):
    filemt= time.localtime(os.stat(now).st_mtime) # 获取文件创建时间
    ModifiedTime=time.strftime("%Y-%m-%d",filemt)
    y=ModifiedTime[:4]
    return y
def count(path,suffix,ignore,statistics,years):
    cnt=0
    for fn in os.listdir(path):
        now = path+fn # 文件路径
        # print(fn)
        if os.path.isdir(now):
            # print(now+'\\')
            if now+'\\' in ignore:
                # print('ignore=',now+'\\')
                continue
            tmp,years=count(now+'\\',suffix,ignore,statistics,years)
            cnt = cnt + tmp
        else:
            filename,type=os.path.splitext(now)
            if type in suffix:
                # print(filename,type)
                try:
                    num = len(open(now, 'r').readlines())# 当前文件的行数
                    y=get_year(now) # 获取文件创建时间(年)
                    # print(now,y)
                    years[y] = years[y]+num
                    statistics[type] = statistics.get(type,0) + num
                except UnicodeDecodeError:# 判断二进制文件
                    pass
                else:
                    cnt = cnt + num
    return cnt,years
if __name__ == '__main__':
    ignore=['D:\\code\\python\\pygame\\pygame-samples-master\\',
            'D:\\code\\python\\Lo-runner-master\\',
            'D:\\code\\Django\\venv\\',
            'D:\\code\\eclipse-workspace\\',
            ]
    suffix=['.cpp','.c','.py','.java']
    years={'2016':0,'2017':0,'2018':0}
    src = 'D:\\code\\'
    statistics=dict()
    ans,years = count(src,suffix,ignore,statistics,years)
    print(src,'下总代码行数为:',ans)
    print('语言统计情况:')
    for key in statistics.keys():
        print(key,':',statistics[key])
    print('年份统计情况:')
    for key in years.keys():
        print(key,':',years[key])

posted @ 2018-12-17 17:37  SCaryon  阅读(402)  评论(2编辑  收藏  举报