热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python代码行数统计工具_Python实现代码统计工具

本文实例为大家分享了Python实现代码统计工具的具体代码,供大家参考,具体内容如下思路:首先获取所有文件,然后统计每个文

本文实例为大家分享了Python实现代码统计工具的具体代码,供大家参考,具体内容如下

思路:首先获取所有文件,然后统计每个文件中代码的行数,最后将行数相加.

实现的功能:

统计每个文件的行数;

统计总行数;

支持指定统计文件类型,排除不想统计的文件类型;

排除空行;

排除注释行

import os

import sys

import os.path

#for i in sys.argv:

# print (i)

# 判断单个文件的代码行数

def count_file_lines(file_path):

line_count = 0

flag=True

try:

fp = open(file_path,"r",encoding="utf-8")

encoding_type="utf-8"

fp.close()

except:

encoding_type="gbk"

with open(file_path,"r",encoding=encoding_type) as fp:

for line in fp:

#print (line_count)

if line.strip()=="":

continue

else:

if line.strip().endswith("'''") and flag == False:

flag=True

continue

if line.strip().endswith('"""') and flag == False:

flag=True

continue

if flag == False:

continue

if line.strip().startswith("#encoding") or line.strip().startswith("#-*-"):

line_count += 1

#elif line.strip().startswith('"""') and line.strip().endswith('"""') and line.strip()!='"""':

#continue

#elif line.strip().startswith("'''") and line.strip().endswith("'''") and line.strip()!="'''":

#continue

elif line.strip().startswith('#'):

continue

elif line.strip().startswith("'''") and flag == True:

flag = False

continue

elif line.strip().startswith('"""') and flag == True:

flag = False

continue

else:

line_count += 1

return line_count

def count_code_lines(path,file_types=[]):

# 判断路径是否存在

if not os.path.exists(path):

print("您输入的目录或文件路径不存在")

return 0

line_count=0 #代码行总数

file_lines_dict={} #每个文件代码行数

# 判断是否为文件

if os.path.isfile(path):

file_type = os.path.splitext(path)[1][1:] #取到文件后缀名

# 判断文件类型是否满足条件

if len(file_types)==0:

file_types=["py","cpp","c","java","ruby","ini","go","html","css","js","txt","vbs","php","asp","sh"]

if file_type in file_types:

line_count = count_file_lines(path)

return line_count

else:

file_path = []

for root, dirs, files in os.walk(path):

for file in files:

file_path.append(os.path.join(root,file))

for f in file_path:

file_type = os.path.splitext(f)[1][1:]

if len(file_types)==0:

file_types=

["py","cpp","c","java","ruby","ini","go","html","css","js","txt","vbs","php","asp","sh"]

if file_type not in file_types:

continue

line_num = count_file_lines(f)

line_count += line_num

file_lines_dict[f] = line_num

return line_count,file_lines_dict

if __name__=="__main__":

print (sys.argv)

if len(sys.argv) <2:

print ("请输入待统计行数的代码绝对路径&#xff01;")

sys.exit()

count_path &#61; sys.argv[1]

file_types &#61; []

if len(sys.argv) >2:

for i in sys.argv[2:]:

file_types.append(i)

#print(count_path,file_types)

print(count_code_lines(count_path,file_types))

#print(count_file_lines("b.py"))

以上就是本文的全部内容&#xff0c;希望对大家的学习有所帮助&#xff0c;也希望大家多多支持脚本之家。



推荐阅读
  • Redis 教程01 —— 如何安装 Redis
    本文介绍了 Redis,这是一个由 Salvatore Sanfilippo 开发的键值存储系统。Redis 是一款开源且高性能的数据库,支持多种数据结构存储,并提供了丰富的功能和特性。 ... [详细]
  • 本文通过具体示例探讨了在 C++ 中使用 extern "C" 的重要性及其作用,特别是如何影响编译后的对象文件中的符号名称。 ... [详细]
  • 题目概述:给定一个数组,计算其中所有连续子序列中平均值不低于给定值k的数量。通过将每个元素减去k并计算前缀和,问题转化为二维数点问题。此问题可以通过离线处理,利用树状数组来高效解决。 ... [详细]
  • 本文介绍了一种利用迭代法解决特定方程问题的方法,特别是当给定函数f(x)在区间[x1, x2]内连续且f(x1)0时,存在一个x~使得f(x~)=0。通过逐步细化搜索范围,可以高效地找到方程的根。 ... [详细]
  • 微信小程序配置详解:pages、window、tabBar与调试模式
    本文详细介绍了如何在微信小程序中配置pages、window、tabBar以及启用调试模式,帮助开发者更好地理解和应用这些配置选项。 ... [详细]
  • 转载网址:http:www.open-open.comlibviewopen1326597582452.html参考资料:http:www.cocos2d-ip ... [详细]
  • 一个产品数组拼图|集合 2 (O(1)空间) ... [详细]
  • 本文详细探讨了 Java 中 Daemon 线程的特点及其应用场景,并深入分析了 Random 类的源代码,帮助开发者更好地理解和使用这些核心组件。 ... [详细]
  • 本文详细介绍了RPM包构建过程中Spec文件的结构和各部分的作用,包括包描述、准备阶段、构建过程、安装步骤、清理操作以及文件列表等关键环节。同时,提供了关于RPM宏命令、打包目录结构及常见标签的深入解析。 ... [详细]
  • ThinkPHP 文件缓存组件详解与应用
    本文深入探讨了ThinkPHP框架中的文件缓存类实现,提供了详细的代码示例和使用说明,旨在帮助开发者更好地理解和利用这一功能来优化应用程序性能。 ... [详细]
  • 本文介绍了如何利用Python的Turtle库来绘制奥运五环。通过设置不同的颜色和位置,能够精确地模拟奥运标志。 ... [详细]
  • 本文基于https://major.io/2014/05/13/coreos-vs-project-atomic-a-review/的内容,对CoreOS和Atomic两个操作系统进行了详细的对比,涵盖部署、管理和安全性等多个方面。 ... [详细]
  • 本文详细介绍了PHP汽车租赁网站源码的获取方式、本地部署步骤以及汽车租赁系统的功能模块,适合开发者和技术爱好者参考。 ... [详细]
  • A题简单判断#includeusingnamespacestd;typedeflonglongll;intt;intmain(){cint;whil ... [详细]
  • 本文详细介绍了如何在Arch Linux系统中安装和配置FlashTool,包括必要的依赖项安装和udev规则设置,以确保工具能够正确识别USB设备。 ... [详细]
author-avatar
小叶2502854061
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有