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中for循环控制语句用法实例
Jun 02 Python
在Python的Django框架中调用方法和处理无效变量
Jul 15 Python
Python列表切片用法示例
Apr 19 Python
Python3安装Pymongo详细步骤
May 26 Python
浅谈Python 的枚举 Enum
Jun 12 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
Jun 22 Python
一文秒懂python读写csv xml json文件各种骚操作
Jul 04 Python
Python socket 套接字实现通信详解
Aug 27 Python
Python流程控制 while循环实现解析
Sep 02 Python
tensorflow的计算图总结
Jan 12 Python
Python 字符串池化的前提
Jul 03 Python
python中scrapy处理项目数据的实例分析
Nov 22 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的5个入手程序
2006/11/23 PHP
不错的一篇面向对象的PHP开发模式(简写版)
2007/03/15 PHP
php权重计算方法代码分享
2014/01/09 PHP
一个简洁实用的PHP缓存类完整实例
2014/07/26 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
从新浪弄下来的全屏广告代码 与使用说明
2007/03/15 Javascript
Javascript 类型转换方法
2010/10/24 Javascript
收集json解析的四种方法分享
2014/01/17 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
模拟一个类似百度google的模糊搜索下拉列表
2014/04/15 Javascript
node.js Web应用框架Express入门指南
2014/05/28 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
jquery实现经典的淡入淡出选项卡效果代码
2015/09/22 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
2015/11/19 Javascript
全面解析Javascript无限添加QQ好友原理
2016/06/15 Javascript
Ajax使用原生态JS验证用户名是否存在
2020/05/26 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
2018/06/19 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
vue下载二进制流图片操作
2020/10/26 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
python numpy函数中的linspace创建等差数列详解
2017/10/13 Python
翻新二手苹果产品的网络领导者:Mac of all Trades
2017/12/19 全球购物
奢华时尚的独特视角:La Garçonne
2018/06/07 全球购物
执行力心得体会
2013/12/31 职场文书
2014全国两会心得体会
2014/03/17 职场文书
总经理任命书
2014/03/29 职场文书
安全目标责任书
2014/07/22 职场文书
2014年采购员工作总结
2014/11/18 职场文书
博士论文答辩开场白
2015/06/01 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
Redis过期数据是否会被立马删除
2022/07/23 Redis