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程序与C程序的结合使用
Apr 07 Python
Python基于scrapy采集数据时使用代理服务器的方法
Apr 16 Python
Python中functools模块函数解析
Mar 12 Python
儿童学习python的一些小技巧
May 27 Python
在Python中使用defaultdict初始化字典以及应用方法
Oct 31 Python
Python发送邮件测试报告操作实例详解
Dec 08 Python
Python静态类型检查新工具之pyright 使用指南
Apr 26 Python
python生成大写32位uuid代码
Mar 03 Python
python实现快递价格查询系统
Mar 03 Python
Python调用shell cmd方法代码示例解析
Jun 18 Python
Python 利用argparse模块实现脚本命令行参数解析
Dec 28 Python
Python如何用re模块实现简易tokenizer
May 02 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 冒泡排序 交换排序法
2011/05/10 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
一个JavaScript去除字符串末尾的空白实例代码
2014/09/22 Javascript
分享9点个人认为比较重要的javascript 编程技巧
2015/04/27 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
用户管理的设计_jquery的ajax实现二级联动效果
2017/07/13 jQuery
详解Vuex中mapState的具体用法
2017/09/28 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
Vue Echarts实现可视化世界地图代码实例
2019/05/07 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
2019/07/21 Javascript
Python使用代理抓取网站图片(多线程)
2014/03/14 Python
Python Web框架Flask中使用七牛云存储实例
2015/02/08 Python
Go语言基于Socket编写服务器端与客户端通信的实例
2016/02/19 Python
python版本的读写锁操作方法
2016/04/25 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
python用post访问restful服务接口的方法
2018/12/07 Python
详解python tkinter教程-事件绑定
2019/03/28 Python
详解Python函数式编程—高阶函数
2019/03/29 Python
Python中字符串与编码示例代码
2019/05/20 Python
python装饰器常见使用方法分析
2019/06/26 Python
正则给header的冒号两边参数添加单引号(Python请求用)
2019/08/09 Python
python和c语言哪个更适合初学者
2020/06/22 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
美国排名第一的在线葡萄酒商店:Wine.com
2016/09/07 全球购物
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
开业庆典答谢词
2014/01/18 职场文书
家长建议怎么写
2014/05/15 职场文书
英文升职感谢信
2015/01/23 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
中学教代会开幕词
2016/03/04 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python