Python在Console下显示文本进度条的方法


Posted in Python onFebruary 14, 2016

进度条实现原理

进度条和一般的print区别在哪里呢?
答案就是print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过stdout输出的东西依旧保留,而且保证我们在下面看到最新的输出结果。
进度条不然,我们必须再原地输出才能保证他是一个进度条,否则换行了怎么还叫进度条?
实现进度条最简单的办法就是,在输出完毕后,把光标移动到行首,继续在那里输出更长的进度条即可实现,新的更长的进度条把旧的短覆盖,就形成了动画效果。

在用Python处理耗时的任务时,往往希望能够了解到任务当前的处理进度,这个时候需要在任务中不断打印出任务的进度信息。一般我们是这样的:

def process_mission():
""" 任务处理方法 """
# 这里是任务处理过程
print('当前处理到第[%d]项' % count)
# 这里是任务处理过程

这种方式会在窗口输出一堆类似下面这样的信息:

当前处理到第1项
当前处理到第2项
当前处理到第3项
当前处理到第4项
当前处理到第5项
....

这种信息有可能非常非常的长,也有可能输出的时候非常非常的快,以至于根本就无法看清楚(输出非常快的时候)。

这时候,我们期待这样的功能:

[================== ] 25.60%

但如果纯粹的使用 print 是无法达到效果的,会变成和前面一样,满屏都是这种杠杠。

如何正确显示进度条呢?

Python提供了一个模块,叫: progressbar ,当使用这个模块之后,你要显示进度的仅需如下:

import progressbar
# 先定义一个进度条
# http://blog.useasp.net/
pbar = progressbar.ProgressBar(maxval=100, \
widgets=[progressbar.Bar('=', '[', ']'), ' ', \
progressbar.Percentage()])
for i in xrange(100):
# 更新进度条
pbar.update(i+1)
pbar.finish()

# Ok,到此完结。

是不是很容易就完成进度条的显示?不过遗憾的是,这个python模块并不是默认的,而是需要安装:

pip install progressbar

如果没有安装 pip 可以 参考这里 。

对于只要一个简单进度条的人来说,安装个python包似乎有点动静太大,那么,自己动手写一个便是了。

下面是Mitchell自己写的一个类似的进度条,不用安装包,简单易用。

# 在使用本方法之前,请先做如下import
# from __future__ import division
# import math
# import sys
# ##blog.useasp.net##
def progressbar(cur, total):
percent = '{:.2%}'.format(cur / total)
sys.stdout.write('\r')
sys.stdout.write("[%-50s] %s" % (
'=' * int(math.floor(cur * 50 / total)),
percent))
sys.stdout.flush()

说明:

cur , total :一个是当前值,一个是总值。 cur 在任务的处理过程中会不断向 total 靠近,直到两者相等,任务结束

需要注意的是,这两个可能为整型,因此要引入 division 。

在使用的时候,只需要调用 progressbar 即可在控制台输出进度条。

# 调用方式举例
progressbar(2, 100)
progressbar(3.9, 10)
progressbar(3283, 27379)

到此,我们完成了一个会在控制台动态更新的进度条。

以上所述是小编给大家介绍的Python在Console下显示文本进度条的方法,希望对大家有所帮助。

Python 相关文章推荐
python 动态获取当前运行的类名和函数名的方法
Apr 15 Python
python动态加载包的方法小结
Apr 18 Python
使用Python脚本和ADB命令实现卸载App
Feb 10 Python
Linux 修改Python命令的方法示例
Dec 03 Python
详解python 3.6 安装json 模块(simplejson)
Apr 02 Python
Python增强赋值和共享引用注意事项小结
May 28 Python
Python 中的pygame安装与配置教程详解
Feb 10 Python
用Python制作mini翻译器的实现示例
Aug 17 Python
python实现人性化显示金额数字实例详解
Sep 25 Python
python 模拟登陆163邮箱
Dec 15 Python
Python自动化爬取天眼查数据的实现
Jun 15 Python
详解Python自动化之文件自动化处理
Jun 21 Python
如何使用python爬取csdn博客访问量
Feb 14 #Python
python动态网页批量爬取
Feb 14 #Python
Python ftp上传文件
Feb 13 #Python
Python cx_freeze打包工具处理问题思路及解决办法
Feb 13 #Python
Python批量创建迅雷任务及创建多个文件
Feb 13 #Python
Python 中 Meta Classes详解
Feb 13 #Python
教大家使用Python SqlAlchemy
Feb 12 #Python
You might like
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
PHP对字符串的递增运算分析
2010/08/08 PHP
解析php中die(),exit(),return的区别
2013/06/20 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
2015/06/17 PHP
PHP最常用的正则表达式
2017/02/13 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
2019/10/20 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
Highslide.js是一款基于js实现的网页中图片展示插件
2020/03/30 Javascript
Javascript String.replace的妙用
2009/09/08 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
使用JavaScript获取电池状态的方法
2014/05/03 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
JavaScript中使用Object.prototype.toString判断是否为数组
2015/04/01 Javascript
原生javascript实现自动更新的时间日期
2016/02/12 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
require.js中的define函数详解
2017/07/10 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
layui使用templet格式化表格数据的方法
2019/09/16 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
python 3.0 模拟用户登录功能并实现三次错误锁定
2017/11/01 Python
利用python如何处理nc数据详解
2018/05/23 Python
Django用户认证系统 User对象解析
2019/08/02 Python
C#软件工程师英语面试题
2015/06/07 面试题
小学生放飞梦想演讲稿
2014/08/26 职场文书
发布会邀请函
2015/01/31 职场文书
2015年机械设备管理工作总结
2015/05/04 职场文书
仙境之桥观后感
2015/06/16 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers