现在的位置: 首页 > 综合 > 正文

进度条和一般的print有什么区别?如何正确显示进度条呢?

2020年02月17日 综合 ⁄ 共 1749字 ⁄ 字号 评论关闭

  Python是一门与php有点像的编辑语言了,下文来给各位在利用Python实现进度条了,对Python在Console下显示文本进度条的方法相关知识感兴趣的朋友一起学习吧

  进度条和一般的print区别在哪里呢?

  答案就是print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过stdout输出的东西依旧保留,而且保证我们在下面看到最新的输出结果。

  进度条不然,我们必须再原地输出才能保证他是一个进度条,否则换行了怎么还叫进度条?

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

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

  def process_mission():

  """ 任务处理方法 """

  # 这里是任务处理过程

  print('当前处理到第[%d]项' % count)

  # 这里是任务处理过程

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

  当前处理到第1项

  当前处理到第2项

  当前处理到第3项

  当前处理到第4项

  当前处理到第5项

  ....

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

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

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

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

  如何正确显示进度条呢?

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

  import progressbar# 先定义一个进度条

  # https://www.xuebuyuan.com/

  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下显示文本进度条的方法,希望对大家有所帮助。

抱歉!评论已关闭.