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实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
Nov 05 Python
Python中动态创建类实例的方法
Mar 24 Python
Python设计实现的计算器功能完整实例
Aug 18 Python
深入理解Python分布式爬虫原理
Nov 23 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
Oct 15 Python
对python操作kafka写入json数据的简单demo分享
Dec 27 Python
Python实现微信机器人的方法
Sep 06 Python
Python数据可视化:幂律分布实例详解
Dec 07 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
Jan 18 Python
Python全面分析系统的时域特性和频率域特性
Feb 26 Python
k-means 聚类算法与Python实现代码
Jun 01 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实现字符串首字母转换成大写的方法
2015/03/17 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
2019/04/27 PHP
js不是基础的基础
2006/12/24 Javascript
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
js 页面元素的几个用法总结
2013/11/18 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
jQuery自动或手动图片切换效果
2017/10/11 jQuery
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
JS实现移动端点击按钮复制文本内容
2019/07/28 Javascript
简述ES6新增关键字let与var的区别
2019/08/23 Javascript
JavaScript 截取字符串代码实例
2019/09/05 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
2020/08/06 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
Python引用传值概念与用法实例小结
2017/10/07 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
Python 获取异常(Exception)信息的几种方法
2020/12/29 Python
简单总结CSS3中视窗单位Viewport的常见用法
2016/02/04 HTML / CSS
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
Myholidays美国:在线旅游网站
2019/08/16 全球购物
土木工程专业大学毕业生求职信
2013/10/13 职场文书
毕业求职自荐信格式是什么
2013/11/19 职场文书
法人授权委托书
2014/04/03 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
Vue和Flask通信的实现
2021/05/19 Vue.js
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python