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获取网页状态码示例
Mar 30 Python
深入理解Python3 内置函数大全
Nov 23 Python
Flask Web开发入门之文件上传(八)
Aug 17 Python
python 中文件输入输出及os模块对文件系统的操作方法
Aug 27 Python
python: 自动安装缺失库文件的方法
Oct 22 Python
python下载微信公众号相关文章
Feb 26 Python
Python面向对象实现一个对象调用另一个对象操作示例
Apr 08 Python
Python环境Pillow( PIL )图像处理工具使用解析
Sep 12 Python
Python大数据之从网页上爬取数据的方法详解
Nov 16 Python
20行Python代码实现视频字符化功能
Apr 13 Python
python 多线程中join()的作用
Oct 29 Python
一文搞懂Python Sklearn库使用
Aug 23 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
提问的智慧
2006/10/09 PHP
PHPWind 发帖回帖Api PHP版打包下载
2010/02/08 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
2013/06/28 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
2016/06/30 PHP
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
ajax java 实现自动完成功能
2012/12/19 Javascript
中文路径导致unitpngfix.js不正常的解决方法
2013/06/26 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
JS实现HTML表格排序功能
2016/08/05 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
jquery实现焦点轮播效果
2017/02/23 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
2020/04/21 Javascript
vue总线机制(bus)知识点详解
2020/05/10 Javascript
python使用multiprocessing模块实现带回调函数的异步调用方法
2015/04/18 Python
Python实现动态加载模块、类、函数的方法分析
2017/07/18 Python
Python unittest 简单实现参数化的方法
2018/11/30 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
python实现三壶谜题的示例详解
2020/11/02 Python
H5调用相机拍照并压缩图片的实例代码
2017/07/20 HTML / CSS
电子商务应届生自我鉴定
2014/01/13 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
2014年审计工作总结
2014/11/17 职场文书
2014公司年终工作总结
2014/12/19 职场文书
2014年个人总结范文
2015/03/09 职场文书
安全责任协议书范本
2016/03/23 职场文书
Python+Tkinter打造签名设计工具
2022/04/01 Python
GoFrame框架数据校验之校验结果Error接口对象
2022/06/21 Golang
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python