python实现代码统计程序


Posted in Python onSeptember 19, 2019

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

# encoding="utf-8"

"""
统计代码行数
"""

import sys
import os

def count_file_line(path):
 """统计文件的有效行数"""
 countLine = 0
 # 设置一个标志位,当遇到以"""或者'''开头或者结尾的时候,置为False
 flag = True

 # 使用utf-8格式的编码方式读取文件,如果读取失败,将使用gbk编码方式读取文件
 try:
 fp = open(path, "r", encoding="utf-8")
 encoding_type = "utf-8"
 fp.close()
 except:
 encoding_type = "gbk"

 with open(path, "r", encoding=encoding_type) as fp:
 for line in fp:
  # 空行不统计
  if line.strip():
  line = line.strip()
  # 注意下面的这两个elif必须要前面,这样子当('"""')结束之后及时将flag置为True
  if line.endswith('"""') and flag == False:
   flag = True
   continue
  if line.endswith("'''") and flag == False:
   flag = True
   continue
  if flag == False:
   continue
  if line.startswith("#!") or line.startswith("#-*-") or line.startswith("# encoding"):
   countLine += 1
  # 如果以“#”号开头的,不统计
  elif line.startswith("#"):
   continue
  # 如果同时以("'''")或者('"""')开头或者结尾(比如:"""aaa"""),那么不统计
  elif line.startswith('"""') and line.endswith('"""') and line != '"""':
   continue
  elif line.startswith("'''") and line.endswith("'''") and line != "'''":
   continue
  # 如果以("'''")或者('"""')开头或者结尾(比如:aaa"""或者"""bbb),那么不统计
  # 注意下面的这两个elif必须要放后面
  elif line.startswith('"""') and flag == True:
   flag = False
   continue
  elif line.startswith("'''") and flag == True:
   flag = False
   continue
  else:
   countLine += 1
 return countLine

def count_codes(path,file_types=[]):
 """统计所有文件代码行"""
 # 判断path是目录还是文件,如果是目录的话,遍历目录下所有的文件
 if not os.path.exists(path):
 print("您输入的路径不存在!")
 return 0
 countTotalLine = 0
 file_paths = {}
 if os.path.isdir(path):
 for root,dirs,files in os.walk(path):
  for name in files:
  if not file_types:
   file_types = ["txt","py"]
   # print(file_types)
  if os.path.splitext(name)[1][1:] in file_types:
   file_path = os.path.normpath(os.path.join(root,name))
   # print(file_path)
   file_lines = count_file_line(file_path)
   countTotalLine += file_lines
   file_paths[file_path] = file_lines
 else:
 if not file_types:
  file_types = ["txt","py"]
 if os.path.splitext(path)[1][1:] in file_types:
  countTotalLine = count_file_line(path)
  file_paths[path] = count_file_line(path)

 return countTotalLine,file_paths


if __name__ == "__main__":
 # 打印出命令行输入的参数
 # print(sys.argv)
 if len(sys.argv) < 2:
 print("请输入路径!")
 sys.exit()
 path = sys.argv[1]
 # print(path)
 file_types = sys.argv[2:]
 # print(file_types)
 print(count_codes(path,file_types))

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

Python 相关文章推荐
Python简单连接MongoDB数据库的方法
Mar 15 Python
python数据结构之链表的实例讲解
Jul 25 Python
Python中join函数简单代码示例
Jan 09 Python
Python常见内置高效率函数用法示例
Jul 31 Python
Python面向对象程序设计示例小结
Jan 30 Python
如何用C代码给Python写扩展库(Cython)
May 17 Python
Python爬虫 bilibili视频弹幕提取过程详解
Jul 31 Python
Python 多线程其他属性以及继承Thread类详解
Aug 28 Python
Python进阶之迭代器与迭代器切片教程
Jan 29 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
Feb 16 Python
Python中remove漏删和索引越界问题的解决
Mar 18 Python
Python3批量创建Crowd用户并分配组
May 20 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 #Python
python3获取url文件大小示例代码
Sep 18 #Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
Sep 18 #Python
python3使用GUI统计代码量
Sep 18 #Python
django中的图片验证码功能
Sep 18 #Python
python tkinter图形界面代码统计工具
Sep 18 #Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
Sep 18 #Python
You might like
PHP开发者常犯的10个MySQL错误更正剖析
2012/01/30 PHP
php的hash算法介绍
2014/02/13 PHP
php获取textarea的值并处理回车换行的方法
2014/10/20 PHP
JavaScript与HTML结合的基本使用方法整理
2015/10/12 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
2019/04/23 PHP
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
详解vue的数据binding绑定原理
2017/04/12 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
react native带索引的城市列表组件的实例代码
2017/08/08 Javascript
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
微信小程序列表时间戳转换实现过程解析
2019/10/12 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
python中mechanize库的简单使用示例
2014/01/10 Python
python基于socket实现网络广播的方法
2015/04/29 Python
python中循环语句while用法实例
2015/05/16 Python
Python中super的用法实例
2015/05/28 Python
用生成器来改写直接返回列表的函数方法
2017/05/25 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
python合并多个excel文件的示例
2020/09/23 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
网友共享的几个面试题关于Java和Unix等方面的
2016/09/08 面试题
市场营销工作计划书
2014/05/06 职场文书
森林病虫害防治方案
2014/06/02 职场文书
民族学专业大学生职业规划范文:清晰未来的构想
2014/09/20 职场文书
开学典礼校长致辞
2015/07/29 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书