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函数的参数的默认值所引发的问题的原因
Mar 30 Python
Python使用scrapy采集时伪装成HTTP/1.1的方法
Apr 08 Python
Djang中静态文件配置方法
Jul 30 Python
Python实现对一个函数应用多个装饰器的方法示例
Feb 09 Python
Python中生成器和迭代器的区别详解
Feb 10 Python
Python面向对象进阶学习
May 21 Python
Python 虚拟空间的使用代码详解
Jun 10 Python
pyqt5、qtdesigner安装和环境设置教程
Sep 25 Python
浅谈keras中的目标函数和优化函数MSE用法
Jun 10 Python
vscode+PyQt5安装详解步骤
Aug 12 Python
Django展示可视化图表的多种方式
Apr 08 Python
全网非常详细的pytest配置文件
Jul 15 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 图像处理类1
2009/06/15 PHP
PHP curl实现抓取302跳转后页面的示例
2014/07/04 PHP
PHP最常用的正则表达式
2017/02/13 PHP
php取出数组单个值的方法
2018/03/12 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
jquery获得同源iframe内body下标签的值的方法
2014/09/25 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
jquery插件bootstrapValidator表单验证详解
2016/12/15 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
javascript+css3开发打气球小游戏完整代码
2017/11/28 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
微信小程序Getuserinfo解决方案图解
2018/08/24 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
[26:21]浴火之凤-TI4世界冠军Newbee战队纪录片
2014/08/07 DOTA
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
python处理数据,存进hive表的方法
2018/07/04 Python
python 调用钉钉机器人的方法
2019/02/20 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
python获取响应某个字段值的3种实现方法
2020/04/30 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
与C++相比,Java中的数组有什么不同
2014/03/25 面试题
物流创业计划书
2014/02/01 职场文书
函授自我鉴定范文
2014/02/06 职场文书
国培计划培训感言
2014/03/11 职场文书
机关作风建设心得体会
2014/10/22 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书
小学校长开学致辞
2015/07/29 职场文书