Python统计python文件中代码,注释及空白对应的行数示例【测试可用】


Posted in Python onJuly 25, 2018

本文实例讲述了Python实现统计python文件中代码,注释及空白对应的行数。分享给大家供大家参考,具体如下:

其实代码和空白行很好统计,难点是注释行

python中的注释分为以#开头的单行注释

或者以'''开头以'''结尾 或以"""开头以"""结尾的文档注释,如:

'''

hello world

'''

'''

hello world'''

思路是用is_comment记录是否存在多行注释,如果不存在,则判断当前行是否以'''开头,是则将is_comment设为True,否则进行空行、当前行注释以及代码行的判断,如果is_comment已经为True即,多行注释已经开始,则判断当前行是否以'''结尾,是则将is_comment设为False,同时增加注释的行数。表示多行注释已经结束,反之继续,此时多行注释还未结束

# -*- coding:utf-8 -*-
#!python3
path = 'test.py'
with open(path,'r',encoding='utf-8') as f:
  code_lines = 0    #代码行数
  comment_lines = 0  #注释行数
  blank_lines = 0   #空白行数 内容为'\n',strip()后为''
  is_comment = False
  start_comment_index = 0 #记录以'''或"""开头的注释位置
  for index,line in enumerate(f,start=1):
    line = line.strip() #去除开头和结尾的空白符

 #判断多行注释是否已经开始 
    if not is_comment:
      if line.startswith("'''") or line.startswith('"""'):
        is_comment = True
        start_comment_index = index
      #单行注释
      elif line.startswith('#'):
        comment_lines += 1
      #空白行
      elif line == '':
        blank_lines += 1
      #代码行
      else:
        code_lines += 1
    #多行注释已经开始
    else:
      if line.endswith("'''") or line.endswith('"""'):
        is_comment = False
        comment_lines += index - start_comment_index + 1
      else:
        pass
print("注释:%d" % comment_lines)
print("空行:%d" % blank_lines)
print("代码:%d" % code_lines)

运行结果:

注释:4
空行:2
代码:26

注:这里的Python测试文件test.py如下:

# -*- coding:utf-8 -*-
#!python3
#九九乘法表
for i in range(1, 10):
    for j in range(1, i+1):
      print("%d*%d=%d\t" % (j, i, i*j), end="")
    print()

#斐波那契数列 0,1,1,2,3,5,8,...

num=int(input("需要几项?"))
n1=0
n2=1
count=2
if num<=0:
  print("请输入一个整数。")
elif num==1:
  print("斐波那契数列:")
  print(n1)
elif num==2:
  print("斐波那契数列:")
  print(n1,",",n2)
else:
  print("斐波那契数列:")
  print(n1,",",n2,end=" , ")
  while count<num:
    sum=n1+n2
    print(sum,end=" , ")
    n1=n2
    n2=sum
    count+=1
print()

感兴趣的朋友可以自己测试一下~

Python 相关文章推荐
Python判断变量是否已经定义的方法
Aug 18 Python
Python利用pyHook实现监听用户鼠标与键盘事件
Aug 21 Python
用Python实现KNN分类算法
Dec 22 Python
微信跳一跳python自动代码解读1.0
Jan 12 Python
PyQt5实现QLineEdit添加clicked信号的方法
Jun 25 Python
python opencv minAreaRect 生成最小外接矩形的方法
Jul 01 Python
Django 全局的static和templates的使用详解
Jul 19 Python
Python代码执行时间测量模块timeit用法解析
Jul 01 Python
PyTorch如何搭建一个简单的网络
Aug 24 Python
Python判断字符串是否为合法标示符操作
Sep 03 Python
python 爬虫如何正确的使用cookie
Oct 27 Python
python爬虫如何解决图片验证码
Feb 14 Python
Pandas读取MySQL数据到DataFrame的方法
Jul 25 #Python
python中的常量和变量代码详解
Jul 25 #Python
pandas的唯一值、值计数以及成员资格的示例
Jul 25 #Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
Jul 25 #Python
基于DataFrame改变列类型的方法
Jul 25 #Python
对pandas中Series的map函数详解
Jul 25 #Python
基于pandas将类别属性转化为数值属性的方法
Jul 25 #Python
You might like
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
基于laravel-admin 后台 列表标签背景的使用方法
2019/10/03 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
JavaScript 提升运行速度之循环篇 译文
2009/08/15 Javascript
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
javascript ajax 仿百度分页函数
2013/10/29 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
浅谈javascript中的数据类型转换
2016/12/27 Javascript
node文字生成图片的示例代码
2017/10/26 Javascript
vue 项目常用加载器及配置详解
2018/01/22 Javascript
基于nodejs res.end和res.send的区别
2018/05/14 NodeJs
vue router 源码概览案例分析
2018/10/09 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
python实现dict版图遍历示例
2014/02/19 Python
Python中的ceil()方法使用教程
2015/05/14 Python
python 读取视频,处理后,实时计算帧数fps的方法
2018/07/10 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
Otel.com:折扣酒店预订
2017/08/24 全球购物
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
高一历史教学反思
2014/01/13 职场文书
百日安全生产活动总结
2014/07/05 职场文书
情人节活动总结范文
2015/02/05 职场文书
2015年园林绿化工作总结
2015/05/23 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书
使用JS实现简易计算器
2021/06/14 Javascript
总结一下关于在Java8中使用stream流踩过的一些坑
2021/06/24 Java/Android
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android