当前位置: 首页 > news >正文

Python3统计代码行小工具

初衷:

之前使用过一个工具统计Java的代码行数,工具不支持python,就整一个

输入选项:

code_path为需要统计的文件目录:比如E:\code\python\LinesCount

code_type为需要统计的文件的后缀:比如 .py

最终的输出就为当前的目录下的所有的.py文件的统计的总行数、注释行数、除去空白行和注释行之后的行数

思路:

具体的逻辑就是通过python的os.path() 模块的一些方法https://www.runoob.com/python/python-os-path.html

在判断是不是文件夹,如果是文件夹就会进去递归访问,直到找到所有的文件目录,并将所有的文件目录都存到fileList中。

在每一次访问文件的时候,通过

os.path.splitext(f_path)[1]

方法取到文件后缀,和输入的文件类型匹配成功就开始进入文件中,进行判断是否为空行或者#开头的注释行,进而进行判断是否为空白行、注释行,最终统计出来数据,打印出来。

具体的一些问题在注释中已经写明。

代码如下:

# *===================================*
# -*- coding: utf-8 -*-
# * Time : 2019/11/13 15:58
# * Author : zhangsf
# *===================================*
import os
import os.path

def count_code(path, key, fileList):
    #返回指定的文件夹包含的文件或文件夹的名字的列表
    for f in os.listdir(path):
        #把目录和文件名合成一个路径
        f_path = os.path.join(path, f)
        #判断路径是否为目录
        if os.path.isdir(f_path):
            #如果当前路径是目录就会递归调用这个方法
            count_code(f_path, key, fileList)
        #如果路径是文件并且 进行分割路径,返回路径名和文件扩展名的元组获得的后缀名为目标文件后缀名
        elif os.path.isfile(f_path) and os.path.splitext(f_path)[1] == key:
            #将文件追加到mylist中
            fileList.append(f_path)
            #打开文件进行统计每一个文件
            with open(f_path, 'r', encoding='utf-8') as file:
                #变量表示所有的行数
                file_all_count = 0
                # 变量表示去掉空白行的代码行数
                file_blank_line_count = 0
                #变量表示注释行
                file_comment_line_count=0
                for  line in file:
                    file_all_count += 1
                    #对每一行进行去掉空格之后判断如果为''则表示为空白行
                    if line.strip() == '':
                        file_blank_line_count += 1
                         #如果为#开头表示为注释行
                    if line.strip().startswith('#'):
                        file_comment_line_count+=1
                print(f_path + '----' + '总行数=' + str(file_all_count) +
                    '      注释行=' + str(file_comment_line_count)+
                      '       除去空白和注释行之后=' + str(file_all_count-file_blank_line_count-file_comment_line_count))
#统计所有文件的代码行数
def count_all_code(fileList):
    all_count = 0
    blank_line_count = 0
    comment_line_count=0
    for f_path in fileList:
        with open(f_path, 'r', encoding='utf-8') as file:
            for line in file:
                all_count += 1
                if line.strip() == '':
                    blank_line_count += 1
                # 先去空格在判断如果为#开头表示为注释行
                if line.strip().startswith('#'):
                    comment_line_count += 1
    print('该路径下总行数=' + str(all_count) +
                    '      注释行=' + str(comment_line_count)+ '    空白行=' + str(blank_line_count)+'    除去空白行和注释行=' + str(all_count-blank_line_count-comment_line_count))

if __name__ == '__main__':
    code_path = input("Please enter code path: ")
    code_type=input("Please enter code type: ")
    print("你需要检索的文件夹目录为"+ str(code_path)+"----------------------检索的代码类型" + str(code_type))
    fileList = []
    count_code(code_path,code_type, fileList)
    count_all_code(fileList)

 

相关文章:

  • GitHub中的README.md编写
  • 使用CSDN的Markdown
  • Java爬取指定知乎问题图片
  • 爬虫是否违法
  • Mac安装VScode运行C语言
  • 基于AP的课堂辅助教学系统Web端
  • 基于AP的课堂辅助教学系统Android端
  • 基于AP的课堂辅助教学系统iOS端
  • Mac安装使用Clion运行C
  • C语言编译过程详解
  • Clion编写第一个C程序
  • C语言输入一串数据到数组中,用空格隔开回车结束
  • C语言-判断字符串b的所有字符是否都在字符串a中出现过
  • C语言:判断A+B和C的关系
  • PV、UV、VV、IP的区别
  • ES6指北【2】—— 箭头函数
  • Angular6错误 Service: No provider for Renderer2
  • Brief introduction of how to 'Call, Apply and Bind'
  • ES6 学习笔记(一)let,const和解构赋值
  • ES学习笔记(12)--Symbol
  • EventListener原理
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java新版本的开发已正式进入轨道,版本号18.3
  • React+TypeScript入门
  • windows下使用nginx调试简介
  • 大主子表关联的性能优化方法
  • 分布式任务队列Celery
  • 将回调地狱按在地上摩擦的Promise
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 漂亮刷新控件-iOS
  • 深入浅出webpack学习(1)--核心概念
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 为视图添加丝滑的水波纹
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 协程
  • 学习JavaScript数据结构与算法 — 树
  • ​插件化DPI在商用WIFI中的价值
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​如何在iOS手机上查看应用日志
  • #NOIP 2014# day.1 T2 联合权值
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (数据结构)顺序表的定义
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一) storm的集群安装与配置
  • (转) Android中ViewStub组件使用
  • (转)程序员技术练级攻略
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .Net 4.0并行库实用性演练
  • .NET delegate 委托 、 Event 事件
  • .NET Framework杂记
  • .net MySql
  • .net 流——流的类型体系简单介绍
  • .NET国产化改造探索(一)、VMware安装银河麒麟