Python显示进度条实现方法

一、进度条实现原理

进度条和一般的print区别在哪里呢?
答案就是print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过stdout输出的东西依旧保留,而且保证我们在下面看到最新的输出结果。
进度条不然,我们必须再原地输出才能保证他是一个进度条,否则换行了怎么还叫进度条?

实现进度条最简单的办法就是,在输出完毕后,把光标移动到行首,继续在那里输出更长的进度条即可实现,新的更长的进度条把旧的短覆盖,就形成了动画效果。 

二、实现方法

1、\r转义实现

转义符\r就可以把光标移动到行首而不换行,转义符\n就把光标移动到行首并且换行。 在python中,输出stdout(标准输出)可以使用sys.stdout.write 例如:

 代码如下 复制代码
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2
"""
Usage:
Just A Template
"""
from __future__ import division
import sys,time
j = '#'
if __name__ == '__main__':
  for i in range(1,61):
    j += '#'
    sys.stdout.write(str(int((i/60)*100))+'%  ||'+j+'->'+"\r")
    sys.stdout.flush()
    time.sleep(0.5)
print

2、\b转义实现法

第二种思路是用转义符\b 转义符\b是退格键,也就是说把输出的光标往回退格子,这样就可以不用+=了,例如:

 代码如下 复制代码
#!/usr/bin/env python
# -*- coding=utf-8 -*-
#Using GPL v2
"""
Usage:
Just A Template
"""
from __future__ import division
import sys,time
if __name__ == '__main__':
  for i in range(1,61):
    sys.stdout.write('#'+'->'+"\b\b")
    sys.stdout.flush()
    time.sleep(0.5)
print

3、progressbar模块实现法

python一个比较强大方便的地方,就是有各种别人做好的类库。我们只需要通过import引入即可。这里可以用下progressbar模块(目前最新版是2.3开发版),效果如下:

上图中使用的是稳定版2.2的版本。四个示例的示码如下(在该模块的progressbar.py文件中可以查到):

   

 代码如下 复制代码
  def example1():
        widgets = ['Test: ', Percentage(), ' ', Bar(marker=RotatingMarker()),
                   ' ', ETA(), ' ', FileTransferSpeed()]
        pbar = ProgressBar(widgets=widgets, maxval=10000000).start()
        for i in range(1000000):
            # do something
            pbar.update(10*i+1)
        pbar.finish()
        print
    def example2():
        class CrazyFileTransferSpeed(FileTransferSpeed):
            "It's bigger between 45 and 80 percent"
            def update(self, pbar):
                if 45 < pbar.percentage() < 80:
                    return 'Bigger Now ' + FileTransferSpeed.update(self,pbar)
                else:
                    return FileTransferSpeed.update(self,pbar)
        widgets = [CrazyFileTransferSpeed(),' <<<', Bar(), '>>> ', Percentage(),' ', ETA()]
        pbar = ProgressBar(widgets=widgets, maxval=10000000)
        # maybe do something
        pbar.start()
        for i in range(2000000):
            # do something
            pbar.update(5*i+1)
        pbar.finish()
        print
    def example3():
        widgets = [Bar('>'), ' ', ETA(), ' ', ReverseBar('<')]
        pbar = ProgressBar(widgets=widgets, maxval=10000000).start()
        for i in range(1000000):
            # do something
            pbar.update(10*i+1)
        pbar.finish()
        print
    def example4():
        widgets = ['Test: ', Percentage(), ' ',
                   Bar(marker='0',left='[',right=']'),
                   ' ', ETA(), ' ', FileTransferSpeed()]
        pbar = ProgressBar(widgets=widgets, maxval=500)
        pbar.start()
        for i in range(100,500+1,50):
            time.sleep(0.2)
            pbar.update(i)
        pbar.finish()
        print

4、progressive模块

progressive模块只适用于python2.7以上的版本。效果如下:

progressive模块的安装方法如下:

 代码如下 复制代码

pip install progressive

git clone https://github.com/hfaran/progressive.git
cd progressive
python setup.py install

时间: 2024-08-05 15:12:00

Python显示进度条实现方法的相关文章

Python显示进度条的方法_python

本文实例讲述了Python显示进度条的方法,是Python程序设计中非常实用的技巧.分享给大家供大家参考.具体方法如下: 首先,进度条和一般的print区别在哪里呢? 答案就是print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过stdout输出的东西依旧保留,而且保证我们在下面看到最新的输出结果. 进度条不然,我们必须再原地输出才能保证他是一个进度条,否则换行了怎么还叫进度条? 最简单的办法就是,再输出完毕后,把光标移动到行首,继续在那里输出更长的进度条即可

python在控制台输出进度条的方法

  本文实例讲述了python在控制台输出进度条的方法.分享给大家供大家参考.具体实现方法如下: 进度条效果如下所示: ? 1 2 |#############################---------------------| 59 percent done 代码如下: ? 1 2 3 4 5 6 7 8 9 class ProgressBar(): def __init__(self, width=50): self.pointer = 0 self.width = width de

Python调用命令行进度条的方法

  本文实例讲述了Python调用命令行进度条的方法.分享给大家供大家参考.具体分析如下: 关键点是输出'r'这个字符可以使光标回到一行的开头,这时输出其它内容就会将原内容覆盖. ? 1 2 3 4 5 6 7 8 9 10 11 import time import sys def progress_test(): bar_length=20 for percent in xrange(0, 100): hashes = '#' * int(percent/100.0 * bar_length

C#实现在弹出窗口中显示进度条

在C#中要实现显示进度条,只要通过C#子线程控制进度条即可.至于弹出一个模式窗口来 显示进度条,则可以按照子线程的思路稍作修改. C#进度条窗体 首先是进度条窗体,需要在上面添加进度条,然后去掉ControlBox.除此外,还要增加一 个方法,用来控制进度条的增加幅度,具体如下: /// < summary> /// Increase process bar /// < /summary> /// < param name="nValue">the

在android不显示进度条对话框的问题

问题描述 在android不显示进度条对话框的问题 进度条对话框在Android程序中显示不出来,我找不出问题的原因.使用了如下代码来显示进度条对话框: func{ progressdialog.show(); .... ..... anotherfunction(); listview.setAdapter(); progressdialog.dismiss(); } 当.show() 命令执行以后,进度条对话框就会显示.但是当otherfucntion()方法被调用后,之前显示的进度条对话框

关于开一新进程显示进度条的问题

问题描述 本人C#新手,网上找到一段代码适合VB.net的,如下:#Region"---------------再开一个线程显示进度条---------------"PrivateSubwaitstart()Me.Cursor=Cursors.WaitCursorBackgroundWorker1.RunWorkerAsync()EndSubPrivateSubwaitend()BackgroundWorker1.CancelAsync()Me.Cursor=Cursors.Defau

PHP利用APC模块实现文件上传进度条的方法_php技巧

本文实例讲述了PHP利用APC模块实现文件上传进度条的方法.分享给大家供大家参考.具体分析如下: 以前的php5.2之前的版本是不能可使用APC模块的,因为之前的压根就没有这个APC模块,如果想使用APC模块实现上传进度条我们必须是php5.2或更高版本. 从5.2开始APC加入了一个叫APC_UPLOAD_PROGRESS的东东,解决了困扰大家已久的进度条问题.并且它把原来的上传时把临时文件全部缓存到内存改成了当临时文件达到设定值时就自动保存到硬盘,有效地改善了内存利用状况. 它的作用原理是在

在ASP.NET中显示进度条

asp.net|显示 对于加载时间比较长的ASP.NET页面,我们可以在客户端浏览器中显示进度条来显示页面正在装载.下面就是具体的实现过程: 新建项目,名字为WebPortal,在项目类型中选择Visual C#项目或者Visual Basic项目都可: 在模板类型中选择ASP.NET Web应用程序: 位置里输入:http://localhost/WebPortal: 添加新项:名字为ShowProgress的Web窗体. 在您的Web窗体ShowProgress.aspx上添加任何其他的We

JS仿Windows开机启动Loading进度条的方法

 这篇文章主要介绍了JS仿Windows开机启动Loading进度条的方法,实例分析了javascript操作html元素及对应样式实现特效的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了JS仿Windows开机启动Loading进度条的方法.分享给大家供大家参考.具体实现方法如下:   代码如下: <html> <title>JS仿Windows开机启动的Loading进度条</title> </head> <body st