代码行统计工具:根据命令行输入的指定目录及文件类型进行统计目录或单个文件的代码行数
#统计指定目录(count_path)、指定文件类型文件(file_types)的代码量
import os
def count_all_file_code(count_path,file_types=None): #判断传入的文件类型list是否为空,如果为空指定文件类型 if len(file_types) == 0: file_types =[".py",".cpp",".java",".c",".h",".php",".asp"] #存储所有文件总代码量 total_line_number = 0 #存储每个文件及代码量 file_lines_dict = {} #判断目录或文件是否存在 if not os.path.exists(count_path): print("输入的目录或文件不存在") #判断是否是文件,统计当前文件的代码量if os.path.isfile(count_path): #获取文件类型后缀名称,例如 bb.py 中的.py file_type = os.path.splitext(count_path)[1]#如果文件类型在指定的文件类型中,调用统计单个文件的函数(调用的函数在后面的代码中),统计单个文件代码 if file_type in file_types: total_line_number = count_sigle_file_code(count_path) #单个文件及代码量写入字典 file_lines_dict[count_path] = total_line_number#返回文件代码量及文件字典 return "文件 %s 代码行数: %d" %(count_path,total_line_number)#判断是否是目录,使用os.walk()遍历统计目录下所有文件的代码量 elif os.path.isdir(count_path): print("进入到判断是否是目录的分支")#遍历目录下的所有文件 for root,dirs,files in os.walk(count_path): for file in files: file_line_number = 0 #需要先声明一下单个文件代码行数的变量,否则会报错#获取文件绝对路径 file_path = os.path.join(root,file)#print("文件的绝对路径===============:%s" %file_path) #这行代码是为了调试,查看哪个文件没有统计代码 #获取文件类型,如果 bb.py 中的.py file_type = os.path.splitext(file_path)[1] #如果文件类型在指定的文件类型中,调用统计单个文件的函数,统计单个文件代码 if file_type in file_types: file_line_number = count_sigle_file_code(file_path)#累计代码量 total_line_number += file_line_number#单个文件及代码量写入字典print("***文件%s的代码量:%s" %(file_path,file_line_number)) file_lines_dict[file_path] = file_line_number#返回总代码量及文件字典 return "总文代码行数: %d\n 每个文件的代码行数: %s" %(total_line_number,file_lines_dict) # 统计单个文件代码量的函数
def count_sigle_file_code(file_path): code_lines = 0 #代码行note_lines = 0 #注释行space_lines = 0 #空白行other_lines = 0 #其他行#获取编码格式 try: fp = open(file_path,encoding="utf-8") encoding_type = "utf-8" except: encoding_type = "gbk" finally: fp.close() #打开文件进行统计代码 with open(file_path,encoding=encoding_type) as fp: while True:#fp.readline():按行读,会读取回车,如果读下一行,继续fp.readline(),没有内容也不会报错line = fp.readline()#如果line为空,表示取到文件末尾,此时break当前while循环if not line: break#如果line以"#"开头,说明是单行注释 elif line.strip().startswith("#"): note_lines+=1#如果line以"'''"或者'"""'开头,说明是多行注释 elif line.strip().startswith("'''") or line.strip().startswith('"""'):note_lines+=1#三单引号和三双引号分开写,是为了防止嵌套情况#如果该行的三双引号数量为1,则表示注释分成多行(防止三双引号里面嵌套三单引号的情况)if line.count('"""') == 1: while True:#继续读下一行line = fp.readline() note_lines+=1#如果该行存在三双引号,则注释结束,break当层while循环if ('"""' in line): break#如果该行的三单引号数量为1,则表示注释分成多行(防止三单引号里面嵌套三双引号的情况) if line.count("'''") == 1: while True:#继续读下一行line = fp.readline() note_lines+=1#如果该行存在三单引号,则注释结束,break当层while循环if ("'''" in line): break#行做过strip()之后非空且以字母开头,则是一个代码行 elif line.strip() and "a" <= line.strip()[0].lower() <= "z": #print("代码行:",line.strip())code_lines += 1#空行 elif line.strip() == "": space_lines += 1#其他行else:other_lines += 1#print("code_lines=%s,note_lines=%s,space_lines=%s,other_lines=%s" %(code_lines,note_lines,space_lines,other_lines))#返回代码行 return code_lines if __name__ == "__main__": #控制台执行命令格式如下:#E:\2019TestStudy\面试————面试题和简历如何写\代码统计工具>py -3 2.py E:\Python_Question\test_file.py .py #E:\2019TestStudy\面试————面试题和简历如何写\代码统计工具>py -3 2.py E:\Python_Question\1first\first_practice .py #执行文件参数 统计目录或文件参数 文件类型参数 import sys#如果长度小于2,证明没有输入目录 if len(sys.argv) < 2: print("请输入要统计的文件目录") sys.exit() #获取需要统计的目录或文件 count_path = sys.argv[1] #文件类型列表 file_types = [] #如果命令行参数list长度大于2,证明有目录和文件类型 print("打印命令行的内容%s" %sys.argv)print("需要统计的目录或文件%s" %count_path)if len(sys.argv) > 2: #遍历命令行的文件类型,加入列表 for file_type in sys.argv[2:]: file_types.append(file_type) print("文件类型列表%s" %file_types) #调用统计代码行函数 print(count_all_file_code(count_path,file_types))
代码行统计工具:根据命令行输入的指定目录及文件类型进行统计目录或单个文件的代码行数相关推荐
- Python 打造基于有道翻译的命令行翻译工具(命令行爱好者必备)
Python 打造基于有道翻译的命令行翻译工具(命令行爱好者必备) 之前基于百度写了一篇博文 Python 打造基于百度翻译的命令行翻译工具,本来这工具用得挺好的.但是没想到,近期处于不知道啥原因,不 ...
- linux 文件类型 时间戳 ls bash特性四 文件查看命令 cp move echo
linux的文件类型普通文件: - , f目录文件 : d (路径映射)链接文件: l (符号链接)设备文件:字符设备:c块文件:b命令管道:p套接字文件:slinux文件时间戳访问时间修改时间改变时 ...
- linux文件类型缩写,常见Linux系统目录、文件类型、ls命令、alias命令
常见Linux系统目录 /bin:存放常用的命令 /sbin:root用的命令存放 /boot:存放的是启动Linux时使用的一些核心文件 /dev:设备的意思,存放Linux的外部设备 /etc:存 ...
- linux基础命令大全(一)——文件类型和常用目录
前言 Linux不像windows那样一切操作都有图形界面.Linux中一切皆为文件,在Linux中做的操作就是对文件的操作,这就需要使用命令来对文件进行操作.但是在学习基础命令之前我认为理清linu ...
- linux查看usb设备卷标,Linux findfs命令实例讲解(查找指定卷标或者UUID的文件系统对应的设备文件)...
findfs 查找指定卷标或者UUID的文件系统对应的设备文件.findfs将搜索系统中的磁盘,寻找具有标签匹配标签或与UUID相等的文件系统.如果找到文件系统,文件系统的设备名称将打印在stdout ...
- linux 命令行 翻译工具,linux 命令行下的翻译工具
linux 命令行下的翻译工具 Luo Weifeng 2011-7-16 第一种:著名的StarDict的命令行版sdcv 安装主程序: #apt-get install sdcv 安装词库: 21 ...
- 08-SNAP的命令行处理工具gpt及其批处理(Sentinel-1和Sentinel-2为例)
转载自:https://blog.csdn.net/lidahuilidahui/article/details/107005979 08-SNAP的命令行处理工具gpt及其批处理(Sentinel- ...
- 统计代码量-代码统计工具 CLOC | gitlab统计代码量
文章目录 一.代码统计工具 CLOC 什么是CLOC? 下载安装 clocs使用 二.gitlab统计代码量 命令行统计 图形化统计 IDE Statistic统计代码插件 一.代码统计工具 CLOC ...
- pythonc代码_Python实现C代码统计工具(一)
Python实现C代码统计工具(一) 标签: Python 代码统计 声明 本文将基于Python2.7脚本语言,实现一个简易的C代码统计工具. 本文同时也发布于作业部落,视觉效果略有不同. 一. 问 ...
最新文章
- 七十八、 回溯法解决八皇后问题
- 旷视三维视觉Workshop | 3D组组长与你畅聊三维技术新动态
- 关于眼保健操中的轮刮眼眶
- 《天天数学》连载20:一月二十日
- shll脚本带参数输入给导出的数据库文件命名以及创造路径
- SVN源码服务器搭建-详细教程(我的收藏)
- C# EF 与 MySql 的那些坑
- java 隐式构造,java隐式创建的对象
- 下载mysql驱动jar包教程
- React项目本地环境正常显示,打包部署服务器图片不显示问题
- (2)颜色渐变及原理
- win10浏览器闪退_Win10电脑的自带浏览器闪退怎么办?其实简单四步就可解决!...
- 《可复制领导力》读后感
- 在线图片尺寸修改 生成图标
- 手动安装jenkins默认插件
- 无所不能的python是如何解决程序员的终身大事的?
- 2--STM32+USB移植+HID 与AUDIO类MIDI设备组成的复合设备
- python复数的概念及运算_python 复数运算
- String字符串类型
- 「从零开始造 RPC 轮子系列」01 我为什么要去造一个轮子?
热门文章
- 卫星影像领域的深度学习数据和模型项目
- matplotlib-10 title添加标题
- 十二星座匹配对象_来看十二星座最配与最不配的对象是谁
- excel调整所有行高列宽
- 灰色关联度矩阵模型及其MATLAB实现
- Photoshop的时间轴是灰色的,不能使的解决方法
- 音视频技术开发周刊 | 277
- 石墨笔记,Onenote和Effie哪个适合SMZDM开箱评论者?
- python tensorflow2 deeplearning 音频处理 声学事件检测
- python根据时间序列画折线图_Python cufflinks 绘制折线图,时间序列,子图:简单,很快,很酷,还会动,从此 seaborn 是路人...