在上一篇的随笔中发表了代码统计小程序,但是发表后,我发现,以前写的代码怎么办

  写了那么多,怎么就从0开始了呢,,,,我还是个孩子啊,不能这么残忍

  于是,代码统计进阶版:统计当前目录下所有指定文件类型的行数

  

  1. #coding:gbk
  2. import os
  3. import time
  4. from CountItem.FindCode import *
  5.  
  6. n = 0
  7. '''查找历史记录的行数'''
  8. try:
  9. with open('TotalLines','r') as p:
  10. lastline = ''
  11. for lastline in p.readlines():
  12. pass
  13. index = lastline.find('>>')
  14. n = int(lastline[index+2:])
  15. except ValueError as e:
  16. n = 0
  17. except FileNotFoundError:
  18. n = 0
  19. '''文件列表'''
  20. fileList = FindCode().getLocalfile(os.getcwd())
  21. '''计算行数'''
  22. for filename in fileList:
  23. try:
  24. with open(filename,'r') as f:
  25. try:
  26. lines = f.readlines()
  27. except UnicodeDecodeError:
  28. '''编码错误,不用管,我们要的是行数'''
  29. '''嗯,,掩耳盗铃'''
  30. pass
  31. for s in lines:
  32. '''不计入空行'''
  33. if s == '\n':
  34. continue
  35. n += 1
  36. except FileNotFoundError as e:
  37. print('文件名或文件路径错误,没有该文件!')
  38. os.system('pause')
  39. os._exit(1)
  40. except OSError as e:
  41. print('文件名不合法')
  42. os.system('pause')
  43. os._exit(1)
  44.  
  45. print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) + '代码行数>>' + str(n) + '\n')
  46.  
  47. '''写入文件'''
  48. with open('TotalLines','a') as f:
  49. f.write(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) + '代码行数>>' + str(n) + '\n')
  50. os.system('pause')
  1. #coding:gbk
  2. import os
  3. class FindCode():
  4. '''初始化查找的文件类型列表'''
  5. def __init__(self):
  6. self.targetFile = []
  7. self.targetFile.append('c')
  8. self.targetFile.append('cpp')
  9. self.targetFile.append('py')
  10. self.targetFile.append('java')
  11. '''递归查找文件,用绝对路径'''
  12. def getLocalfile(self,findpath):
  13. fileList = os.listdir(findpath)
  14. aimsList = []
  15. for filepath in fileList:
  16. filepath = findpath + '\\' + filepath
  17. if os.path.isdir(filepath):
  18. aimsList.extend(self.getLocalfile(filepath))
  19. else:
  20. if self.selectFile(filepath):
  21. aimsList.append(filepath)
  22. return aimsList
  23.  
  24. def selectFile(self,filepath):
  25. index = filepath.find('.')
  26. lastname = filepath[index+1:]
  27. return True if lastname in self.targetFile else False
  28.  
  29. if __name__ == '__main__':
  30. Demo = FindCode()
  31. print('\n'.join(x for x in Demo.getLocalfile(os.getcwd())))

但是,不能统计一次挪一次窝吧,再改!

  1. '''文件列表'''
  2. filepath = input('请输入指定文件路径(绝对路径):')
  3. if os.path.isdir(filepath):
  4. fileList = FindCode().getLocalfile(filepath)

这个就对了,很爽,,,

python--代码统计(进阶版)的更多相关文章

  1. Python代码统计工具

    目录 Python代码统计工具 声明 一. 问题提出 二. 代码实现 三. 效果验证 Python代码统计工具 标签: Python 代码统计 声明 本文将对<Python实现C代码统计工具(一 ...

  2. python代码统计

    代码统计 修改filename为文件夹or文件地址,然后统计所有python文件代码 import os import sys def count_code_lines(filename): res ...

  3. Git项目代码统计-Python3版gitstats

    gitstats是一个Git项目统计工具,可以统计git项目代码提交量,提交者的贡献量及活动热力图等信息,如下图. gitstats基于Python2.7,使用git log命令生成统计信息,基于gn ...

  4. python代码统计核酸检测结果截图

    #QQ:502440275@qq.com#本截图适合安康码截图,如需其他地区截图统计,可与我QQ或QQ邮箱联系#1.在当前文件夹下创建imgs文件夹用于存放图片,图片格式.jpg#2.在当前文件夹下创 ...

  5. python面向对象初始进阶版 通过一道题带你认识面向对象

    定义一个类 class Person: #公共属性 animal='高级动物' soul='有灵魂' language='语言' def init(self,country,name,sex,age, ...

  6. Python实现代码统计工具——终极加速篇

    Python实现代码统计工具--终极加速篇 声明 本文对于先前系列文章中实现的C/Python代码统计工具(CPLineCounter),通过C扩展接口重写核心算法加以优化,并与网上常见的统计工具做对 ...

  7. Python实现C代码统计工具(二)

    目录 Python实现C代码统计工具(二) 声明 一. 问题提出 二. 代码实现 三. 效果验证 Python实现C代码统计工具(二) 标签: Python 代码统计 声明 本文将对<Pytho ...

  8. Python实现C代码统计工具(一)

    目录 Python实现C代码统计工具(一) 声明 一. 问题提出 二. 代码实现 三. 效果验证 四. 后记 Python实现C代码统计工具(一) 标签: Python 代码统计 声明 本文将基于Py ...

  9. python三级菜单实例(傻瓜版和进阶版)

    程序: python三级菜单 要求: : 1.打印省.市.县三级菜单 2.可返回上一级 3.可随时退出程序 方案一:傻瓜版(其实傻瓜版考察的主要是思路!思路清楚了,那才不是傻瓜!O(∩_∩)O哈哈~) ...

随机推荐

  1. 【Android Developers Training】 76. 用Wi-Fi创建P2P连接

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  2. 浅谈IOC

    一.引言 IOC-Invertion of Control,即控制反转,是一种程序设计思想,世上本没有路,走的人多了便有了路,本文将一步步带你了解IOC设计思想的演进之路. 在学习IOC之前我们先初步 ...

  3. ASP.NET Core 2.0 SignalR 示例

    # 一.前言 上次讲SignalR还是在<[在ASP.NET Core下使用SignalR技术](http://dotnet.ren/2017/02/21/%E5%9C%A8ASP-NET-Co ...

  4. C++ 宏定义#define 中##的使用

    在C++的宏定义中,符号##一般是用于连接,包括参数的连接,参数与标识符的连接等,然后形成一个新的标识符. 下面举几个例子来进行说明. eg1: #define ADD(a,b) a##b #defi ...

  5. 基于Metronic的Bootstrap开发框架经验总结(15)-- 更新使用Metronic 4.75版本

    在基于Metronic的Bootstrap开发框架中,一直都希望整合较新.较好的前端技术,结合MVC的后端技术进行项目的开发,随着时间的推移,目前Metronic也更新到了4.75版本,因此着手对这个 ...

  6. OpenGL的配置与搭建

    一.项目中所使用的OpenGL扩展库有: 1. freeglut-3.0.0 2. glew-2.0.0 3. glm-0.9.7.3 二.添加扩展库文件 在工程项目文件夹里面添加OpenGLExte ...

  7. js如何获取样式?

    在某个项目中,我们经常会需要来获取某个元素的样式,比如说获取一个div的color:这样,新的问出现了, var style = box.style.width;console.log(style); ...

  8. 3,Spring Boot热部署

    问题的提出: 在编写代码的时候,你会发现我们只是简单把打印信息改变了,就需要重新部署,如果是这样的编码方式,那么我们估计一天下来就真的是打几个Hello World就下班了.那么如何解决热部署的问题呢 ...

  9. ASP.NET MVC HttpPostedFileBase文件上传

    HttpPostedFileBase文件上传,支持多文件一次上传,如有图片,则支持略缩图保存 文件传输信息封装 /// <summary> /// 文件生成方式 /// </summ ...

  10. java核心机制

    Java中有两种核心机制:Java虚拟机(Java Virtual Machine).垃圾收集机制(Garbage collection) 一.核心机制之Java虚拟机 ① Java虚拟机可以理解成一 ...