使用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 写了一个批量生成文件夹和批量重命名的工具
Python 写了一个批量生成文件夹和批量重命名的工具 目录 Python 写了一个批量生成文件夹和批量重命名的工具 演示 功能 1. 可以读取excel内容,使用excel单元格内容进行新建文件夹, ...
- 用Python写了一个postgresql函数,感觉很爽
用Python写了一个postgresql函数,感觉很爽 CREATE LANGUAGE plpythonu; postgresql函数 CREATE OR REPLACE FUNCTION myfu ...
- python 怎么启动一个外部命令程序, 并且不阻塞当前进程
http://www.myexception.cn/perl-python/1278887.html http://blog.chinaunix.net/uid-25979788-id-3081912 ...
- 我最近用Python写了一个算法,不需要写任何规则就能自动识别一个网页的内容
我最近用Python写了一个算法,不需要写任何规则就能自动识别一个网页的内容,目前测试了300多个新闻网站的新闻页,都能准确识别
- 用Racket语言写了一个万花筒的程序
用Racket语言写了一个万花筒的程序 来源:https://blog.csdn.net/chinazhangyong/article/details/79362394 https://github. ...
- 用python写个简单的小程序,编译成exe跑在win10上
每天的工作其实很无聊,早知道应该去IT公司闯荡的.最近的工作内容是每逢一个整点,从早7点到晚11点,去查一次客流数据,整理到表格中,上交给素未蒙面的上线,由他呈交领导查阅. 人的精力毕竟是有限的,所以 ...
- python写的一个集合
起因:原本打算用python写一个抢火车票的脚本.在那 期间遇见各种浏览器驱动失败的节奏....打算先缓一下 然后就去写集合了. 0x01 源码: # -*- coding:'utf-8' -*- # ...
- 用Python写的一个多线程机器人聊天程序
本人是从事php开发的, 近来想通过php实现即时通讯(兼容windows).后来发现实现起来特别麻烦, 就想到python.听说这家伙在什么地方都能发挥作用.所以想用python来做通讯模块...所 ...
- 分享下自己写的一个微信小程序请求远程数据加载到页面的代码
1 思路整理 就是页面加载完毕的时候 请求远程接口,然后把数据赋值给页面的变量 ,然后列表循环 2 js相关代码 我是改的 onload函数 /** * 生命周期函数--监听页面加载 */ on ...
随机推荐
- lintcode 447 Search in a Big Sorted Array(倍增+二分)
题意:给一个按照升序排序的正整数数组.这个数组很大以至于只能通过固定的接口ArrayReader->get(k)来访问第k个数.并且也没有办法得知这个数组有多大.找到给出的整数target第一次 ...
- Python_多线程threading模块
python 在执行的时候会淡定的在CPU上只允许一个线程运行,故Python在多核CPU的情况下也只能发挥出单核的功能,其中的原因:gil锁 gil 锁 (全局解释器锁):每个线程在执行时都需要先获 ...
- 使用Spring ThreadPoolTaskExecutor实现多线程任务
我们为何使用多线程,之前已经有讲过了,为了更快的处理多个任务,分割任务,或者调用多个毫无关联的第三方服务 其实spring就提供了ThreadPoolTaskExecutor这个类来实现线程池,线程池 ...
- C 小白的 thrift 环境搭建
公司有个通讯 是用的 thrift ,thrift 是个什么都东西,可以类比 webservice 吧,比 webservice 高效些,不管是啥,搞他! 先在 mac 上搞本地开发环境 网上一搜 貌 ...
- bzoj 4842 [Neerc2016]Delight for a Cat 最小费用最大流,线性规划
题意:有n个小时,对于第i个小时,睡觉的愉悦值为si,打隔膜的愉悦值为ei,同时对于任意一段连续的k小时,必须至少有t1时间在睡觉,t2时间在打隔膜.如果要获得的愉悦值尽 量大,求最大的愉悦值和睡觉还 ...
- Android系统文件目录路径说明
系统数据存储路径,如下:其中应用程序包名为:com.spt ContextWrapper类中,包含以下方法: 1. getFilesDir() --> 内部存储 @Override public ...
- saprfc
PHP在使用saprfc的时候,首先需要安装 saprfc 拓展,然后在引入saprfc.php类库,最后在使用. 一.PHP saprfc拓展的安装(Linux): 安装方法: 安装时需 ...
- H5页面测试实战总结
如何判断是否是H5页面: 基本上只要对那个view长按,然后看是不是有反应,比如手机震动(Android).或者出现文字选择粘贴(Android/iOS),那么就是WebView! 横屏竖屏相互切换, ...
- WebService的两种方式SOAP和REST有什么不同?
REST API 优点: 1. 轻量级的解决方案,不必向SOAP那样要构建一个标准的SOAP XML. 2. 可读性比较好:可以把URL的名字取得有实际意义. 3. 不需要SDK支持:直接一个Http ...
- SpringMVC的坑
The request sent by the client was syntactically incorrect. 这个错误的原因是 因为 提交的表单数据和目标方法的入参不一致所导致 然后我就 ...