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 re正则表达式模块(Regular Expression)
Jul 16 Python
python实现在pickling的时候压缩的方法
Sep 25 Python
Python访问MySQL封装的常用类实例
Nov 11 Python
Python脚本实现网卡流量监控
Feb 14 Python
Python的Django REST框架中的序列化及请求和返回
Apr 11 Python
python2.7+selenium2实现淘宝滑块自动认证功能
Feb 24 Python
磁盘垃圾文件清理器python代码实现
Aug 24 Python
Python Unittest自动化单元测试框架详解
Apr 04 Python
Python实现查询某个目录下修改时间最新的文件示例
Aug 29 Python
Flask中sqlalchemy模块的实例用法
Aug 02 Python
Python paramiko使用方法代码汇总
Nov 20 Python
Python基础之元类详解
Apr 29 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
详解PHP显示MySQL数据的三种方法
2008/06/05 PHP
PHP+Ajax+JS实现多图上传
2016/05/07 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
javascript 简练的几个函数
2009/08/29 Javascript
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
Javascript 倒计时源代码.(时.分.秒) 详细注释版
2011/05/09 Javascript
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
2013/01/08 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
JS截取url中问号后面参数的值信息
2014/04/29 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
Angular中自定义Debounce Click指令防止重复点击
2017/07/26 Javascript
js中less常用的方法小结
2017/08/09 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
js实现点击生成随机div
2020/01/16 Javascript
JS实现鼠标按下拖拽效果
2020/07/23 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
Python爬虫框架Scrapy实例代码
2018/03/04 Python
python email smtplib模块发送邮件代码实例
2018/04/26 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
Python实现Restful API的例子
2019/08/31 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
CSS3 边框效果
2019/11/04 HTML / CSS
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
台湾团购、宅配和优惠券:17Life
2017/08/14 全球购物
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
人力资源部培训专员岗位职责
2014/01/02 职场文书
力学专业求职信
2014/07/23 职场文书
绿色小区申报材料
2014/08/22 职场文书
幽默导游词开场白
2015/05/29 职场文书
校园运动会广播稿
2015/08/19 职场文书
安全教育培训心得体会
2016/01/15 职场文书
Python 的演示平台支持 WSGI 接口的应用
2022/04/20 Python