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

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

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

  

 #coding:gbk
 import os
 import time
 from CountItem.FindCode import *

 n = 0
 '''查找历史记录的行数'''
 try:
     with open('TotalLines','r') as p:
         lastline = ''
         for lastline in p.readlines():
             pass
         index = lastline.find('>>')
         n = int(lastline[index+2:])
 except ValueError as e:
     n = 0
 except FileNotFoundError:
     n = 0
 '''文件列表'''
 fileList = FindCode().getLocalfile(os.getcwd())
 '''计算行数'''
 for filename in fileList:
     try:
         with open(filename,'r') as f:
             try:
                 lines = f.readlines()
             except UnicodeDecodeError:
                 '''编码错误,不用管,我们要的是行数'''
                 '''嗯,,掩耳盗铃'''
                 pass
             for s in lines:
                 '''不计入空行'''
                 if s == '\n':
                     continue
                 n += 1
     except FileNotFoundError as e:
         print('文件名或文件路径错误,没有该文件!')
         os.system('pause')
         os._exit(1)
     except OSError as e:
         print('文件名不合法')
         os.system('pause')
         os._exit(1)

 print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) + '代码行数>>' + str(n) + '\n')

 '''写入文件'''
 with open('TotalLines','a') as f:
     f.write(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) + '代码行数>>' + str(n) + '\n')
 os.system('pause')
 #coding:gbk
 import os
 class FindCode():
     '''初始化查找的文件类型列表'''
     def __init__(self):
         self.targetFile = []
         self.targetFile.append('c')
         self.targetFile.append('cpp')
         self.targetFile.append('py')
         self.targetFile.append('java')
     '''递归查找文件,用绝对路径'''
     def getLocalfile(self,findpath):
         fileList = os.listdir(findpath)
         aimsList = []
         for filepath in fileList:
             filepath = findpath + '\\' + filepath
             if os.path.isdir(filepath):
                 aimsList.extend(self.getLocalfile(filepath))
             else:
                 if self.selectFile(filepath):
                     aimsList.append(filepath)
         return aimsList

     def selectFile(self,filepath):
         index = filepath.find('.')
         lastname = filepath[index+1:]
         return True if lastname in self.targetFile else False

 if __name__ == '__main__':
     Demo = FindCode()
     print('\n'.join(x for x in Demo.getLocalfile(os.getcwd())))
     

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

 '''文件列表'''
 filepath = input('请输入指定文件路径(绝对路径):')
 if os.path.isdir(filepath):
      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. RabbitMQ系列教程之四:路由(Routing)

    (使用Net客户端)在上一个教程中,我们构建了一个简单的日志系统,我们能够向许多消息接受者广播发送日志消息.在本教程中,我们将为其添加一项功能 ,这个功能是我们将只订阅消息的一个子集成为可能. 例如, ...

  2. JDBC01 利用JDBC连接数据库【不使用数据库连接池】

    目录: 1 什么是JDBC 2 JDBC主要接口 3 JDBC编程步骤[学渣版本] 5 JDBC编程步骤[学神版本] 6 JDBC编程步骤[学霸版本] 1 什么是JDBC JDBC是JAVA提供的一套 ...

  3. python中的可变与不可变对象

    Python中的可变对象和不可变对象 什么是可变/不可变对象 不可变对象,该对象所指向的内存中的值不能被改变.当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一 ...

  4. JS运动框架的封装过程(一)

    给大家出一道题,从起点A走到目的地B,一共用了1000毫秒,每一次是30毫秒,请问你在这里面得到了哪些信息? 信息有哪些呢? 第一个,总时长是:1000毫秒 第二个,多久时间走一次?30毫秒 第三个, ...

  5. BufferedReaderTest

    package JBJADV003;import java.io.*;public class BufferedReaderTest { /** * @param args */ public sta ...

  6. BottomupSort算法 c++代码实现

    #include <iostream> using namespace std; #define N 100 int A[N]; static int n; void Initial() ...

  7. maven工程中pom.xml的错误

    更新maven工程,出现如下错误信息. Could not calculate build plan: Failure to transfer org.apache.maven.plugins:mav ...

  8. Spring3中@Value注解的使用

    Spring可以通过@Value注解来直接获取properties文件里面配置的值. 1. 首先要在spring的配置文件中指明properties文件的位置: <context:propert ...

  9. 使用TinyXML进行XML操作

    本例基于TinyXML实现XML的自动解析和创建,由于本人是菜鸟刚入门,例子中添加了enum.struct.vector.map.list的常见用法,首先添加6个tinyxml工程文件,然后设置调试参 ...

  10. JavaScript DOM编程艺术读后感(1)—— 平稳退化

    最近,在读<JavaScript DOM编程艺术(第二版)>这本书,想着将自己的读后感记录下来,作为记忆吧. 其实我并不是最近才刚开始读这本书的,我读了有一段时间了.我是一名web前端开发 ...