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实现给数组按片赋值的方法
Jul 28 Python
微信跳一跳自动运行python脚本
Jan 08 Python
Selenium定位元素操作示例
Aug 10 Python
在Python 中同一个类两个函数间变量的调用方法
Jan 31 Python
python使用requests模块实现爬取电影天堂最新电影信息
Apr 03 Python
python正则表达式匹配不包含某几个字符的字符串方法
Jul 23 Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 Python
django 解决自定义序列化返回处理数据为null的问题
May 20 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 Python
python和go语言的区别是什么
Jul 20 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
Sep 03 Python
python 利用toapi库自动生成api
Oct 19 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
用Socket发送电子邮件
2006/10/09 PHP
php 用sock技术发送邮件的函数
2007/07/21 PHP
PHP Cookie学习笔记
2016/08/23 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
2016/12/09 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
Javascript miscellanea -display data real time, using window.status
2007/01/09 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
使用jquery插件qrcode生成二维码
2015/10/22 Javascript
原生js实现autocomplete插件
2016/04/14 Javascript
EsLint入门学习教程
2017/02/17 Javascript
详解Vue爬坑之vuex初识
2017/06/14 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
简单了解TypeScript中如何继承 Error 类
2019/06/21 Javascript
Vue Extends 扩展选项用法完整实例
2019/09/17 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
Python日期操作学习笔记
2008/10/07 Python
Python+MongoDB自增键值的简单实现
2016/11/04 Python
利用python爬取散文网的文章实例教程
2017/06/18 Python
Python使用pyh生成HTML文档的方法示例
2018/03/10 Python
python编程使用协程并发的优缺点
2018/09/20 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
2020/06/02 Python
3分钟看懂Python后端必须知道的Django的信号机制
2020/07/26 Python
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
摩飞电器俄罗斯官方网站:Morphy Richards俄罗斯
2020/07/30 全球购物
神路信息Java面试题目
2013/03/31 面试题
物流专业求职计划书
2014/01/10 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
学生安全责任书模板
2014/07/25 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
如何用Navicat操作MySQL
2021/05/12 MySQL
Javascript使用integrity属性进行安全验证
2021/11/07 Javascript