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 解析html之BeautifulSoup
Jul 07 Python
Python中的pass语句使用方法讲解
May 14 Python
改进Django中的表单的简单方法
Jul 17 Python
python fabric实现远程部署
Jan 05 Python
快速解决安装python没有scripts文件夹的问题
Apr 03 Python
python 计算数据偏差和峰度的方法
Jun 29 Python
django做form表单的数据验证过程详解
Jul 26 Python
详解python pandas 分组统计的方法
Jul 30 Python
解决python 文本过滤和清理问题
Aug 28 Python
python列表删除和多重循环退出原理详解
Mar 26 Python
在python3.64中安装pyinstaller库的方法步骤
Jun 02 Python
python 实现弹球游戏的示例代码
Nov 17 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 批量删除数据的方法分析
2009/10/30 PHP
PHP与C#分别格式化文件大小的代码
2011/05/14 PHP
基于PHP服务端图片生成缩略图的方法详解
2013/06/20 PHP
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
2018/09/16 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
JS 判断代码全收集
2009/04/28 Javascript
使用jQuery轻松实现Ajax的实例代码
2010/08/16 Javascript
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
使用Javascript写的2048小游戏
2015/11/25 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
jQuery插件zTree实现的多选树效果示例
2017/03/08 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
一个简单的python程序实例(通讯录)
2013/11/29 Python
Python中分数的相关使用教程
2015/03/30 Python
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
Python退火算法在高次方程的应用
2018/07/26 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
python简单的三元一次方程求解实例
2020/04/02 Python
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
美国在线艺术商店:HandmadePiece
2020/11/06 全球购物
工作简历自我评价
2015/03/11 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
vue首次渲染全过程
2021/04/21 Vue.js
git stash(储藏)的用法总结
2022/06/25 Servers