Python实现代码统计工具


Posted in Python onSeptember 19, 2019

本文实例为大家分享了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 ("请输入待统计行数的代码绝对路径!")
 sys.exit()
 count_path = sys.argv[1]
 file_types = []
 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"))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 中文乱码问题深入分析
Mar 13 Python
Python的组合模式与责任链模式编程示例
Feb 02 Python
Python中模块string.py详解
Mar 12 Python
Python基础学习之常见的内建函数整理
Sep 06 Python
Python实现的计数排序算法示例
Nov 29 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
python实现自动网页截图并裁剪图片
Jul 30 Python
python实现在函数图像上添加文字和标注的方法
Jul 08 Python
python解析命令行参数的三种方法详解
Nov 29 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
Mar 27 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
Jun 29 Python
Python合并pdf文件的工具
Jul 01 Python
python实现统计代码行数的小工具
Sep 19 #Python
python日志模块logbook使用方法
Sep 19 #Python
python统计指定目录内文件的代码行数
Sep 19 #Python
python如何从文件读取数据及解析
Sep 19 #Python
python实现代码统计器
Sep 19 #Python
python实现代码统计程序
Sep 19 #Python
python tkinter图形界面代码统计工具(更新)
Sep 18 #Python
You might like
PHP提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
php获取post中的json数据的实现方法
2011/06/08 PHP
关于svn冲突的解决方法
2013/06/21 PHP
destoon之一键登录设置
2014/06/21 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
JavaScript URL参数读取改进版
2009/01/16 Javascript
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
js关于命名空间的函数实例
2015/02/05 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
jquery实现清新实用的网页菜单效果
2015/08/28 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
基于openlayers4实现点的扩散效果
2020/08/17 Javascript
详解Vue Elememt-UI构建管理后台
2018/02/27 Javascript
vue mounted组件的使用
2018/06/18 Javascript
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
如何在 JavaScript 中更好地利用数组
2018/09/27 Javascript
详解Js里的for…in和for…of的用法
2019/03/28 Javascript
matplotlib给子图添加图例的方法
2018/08/03 Python
pandas 将索引值相加的方法
2018/11/15 Python
flask-restful使用总结
2018/12/04 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
养殖行业的创业计划书
2014/01/05 职场文书
《神奇的克隆》教学反思
2014/04/10 职场文书
倡议书格式
2014/08/30 职场文书
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB