Python实现输出程序执行进度百分比的方法


Posted in Python onSeptember 16, 2017

本文实例讲述了Python实现输出程序执行进度百分比的方法。分享给大家供大家参考,具体如下:

对于一些大型的Python程序,我们需要在命令行输出其百分比,显得更加友好,以免被人误会程序陷入死循环、假死的窗体。
关键是利用到不换行的输出符\r,\r的输出,将直接覆盖掉此行的内容。

比如如下的程序,是一个i从0自加的十万的过程,即使对于现在高性能的CPU也是需要几秒的时间的,我们要输出其执行时候的百分比,可以在引入sys这个包之后,利用到sys.stdout.write输出,避免原生态的print自带的\n影响大局。同时要控制百分比的小数位为4。程序执行的百分比恰好为i当前的值除以值为十万的total。

#-*-coding:utf-8-*-
import sys;
total=100000
for i in range(0,total):
  percent=float(i)*100/float(total)
  sys.stdout.write("%.4f"%percent);
  sys.stdout.write("%\r");
  sys.stdout.flush();
sys.stdout.write("100%!finish!\r");
sys.stdout.flush();

程序运行结果如下:

Python实现输出程序执行进度百分比的方法

但是,这里i每自增一次就要求当前的运行的百分比,把原本100000次的浮点运算徒然增加到二十万次,同时要刷新100000次的屏幕,非常不合理,因此对于程序,可以做如下的改进,运行百分比仅保留2位小数,同时i每累积100才进行百分比输出,程序修改之后如下:

#-*-coding:utf-8-*-
import sys;
total=100000
for i in range(0,total):
  if i%100==0:
    percent=float(i)*100/float(total)
    sys.stdout.write("%.2f"%percent);
    sys.stdout.write("%\r");
    sys.stdout.flush();
sys.stdout.write("100%!finish!\r");
sys.stdout.flush();

从求运行百分比的100000次的浮点运算改为100000次的条件运算,同时仅要刷新屏幕1000次,程序的运行耗时将大大减少。

同时,这里值得注意的是,Eclipse中的Pydev中的控制台,对于\r依然是处理成换行符,使得输出变成如下的样子,这里没有办法了!

Python实现输出程序执行进度百分比的方法

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
Jul 09 Python
Python中字符串的常见操作技巧总结
Jul 28 Python
python3中int(整型)的使用教程
Mar 23 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
Jan 08 Python
详解Django中间件的5种自定义方法
Jul 26 Python
python安装scipy的方法步骤
Jun 26 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
Django中FilePathField字段的用法
May 21 Python
Keras自定义IOU方式
Jun 10 Python
深入理解Python 多线程
Jun 16 Python
这样写python注释让代码更加的优雅
Jun 02 Python
基于Python实现对比Exce的工具
Apr 07 Python
Python实现求笛卡尔乘积的方法
Sep 16 #Python
轻松理解Python 中的 descriptor
Sep 15 #Python
Python 实现购物商城,含有用户入口和商家入口的示例
Sep 15 #Python
python中reload(module)的用法示例详解
Sep 15 #Python
Python 关于反射和类的特殊成员方法
Sep 14 #Python
在Python中执行系统命令的方法示例详解
Sep 14 #Python
关于Python如何避免循环导入问题详解
Sep 14 #Python
You might like
在PHP中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
PHP基于GD库实现的生成图片缩略图函数示例
2017/07/05 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
js中匿名函数的N种写法
2010/09/08 Javascript
从盛大通行证上摘下来的身份证验证js代码
2011/01/11 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
浅析Bootstrip的select控件绑定数据的问题
2016/05/10 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
javascript实现简易计算器
2017/02/01 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
2020/08/06 Javascript
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
为Python的web框架编写前端模版的教程
2015/04/30 Python
python中nan与inf转为特定数字方法示例
2017/05/11 Python
Python连接phoenix的方法示例
2017/09/29 Python
终端命令查看TensorFlow版本号及路径的方法
2018/06/13 Python
对python For 循环的三种遍历方式解析
2019/02/01 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
python动态视频下载器的实现方法
2019/09/16 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
2020/02/26 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
白色公司:The White Company
2017/10/11 全球购物
加拿大在线眼镜零售商:SmartBuyGlasses加拿大
2019/05/25 全球购物
几个判断型的面试题
2012/07/03 面试题
有模特经验的简历自我评价
2013/09/19 职场文书
在求职信中如何凸显个人优势
2013/10/30 职场文书
信息管理员岗位职责
2013/12/01 职场文书
群众路线党员个人剖析材料
2014/10/08 职场文书
工地材料员岗位职责
2015/04/11 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
2016新年问候语大全
2015/11/11 职场文书
护士岗前培训心得体会
2016/01/08 职场文书
pandas提升计算效率的一些方法汇总
2021/05/30 Python