一文教你用Python中progress库实现进度条

 更新时间:2023年03月24日 15:36:51   作者:小斌哥ge  
这篇文章主要为大家详细介绍了如何通过Python中的progress库实现进度条的绘制,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

progress库安装和介绍

1.安装progress库

progress是Python第三方库,在终端执行 pip 命令安装。

pip install progress

2.progress进度条效果展示

progress的pypi源地址为:https://pypi.org/project/progress/

在官网可以看到progress能实现的各种进度条效果,如下动图。

progress实现进度条

# coding=utf-8
from progress.bar import Bar
import time

# 创建Bar类的实例
bar = Bar('MyProcess:', max=100)
# 循环处理某业务,调用bar对象的next()方法,循环次数等于max
for _ in range(100):
	# Do some work
    time.sleep(0.05)
    bar.next()
# 循环完成后调用finish()方法
bar.finish()

运行效果:

使用 progress 库实现进度条很简单,从 progress 库的 bar.py 中导入 Bar 类,实例化一个对象,然后循环处理业务和调用 next() 方法,处理完成后调用 finish() 方法结束进度条。

Bar 类的主要参数有:

  • message: 进度条显示的信息,这个参数默认可以用位置参数传给 Bar 。
  • width: 修改进度条的宽度,默认32。
  • max: 进度条被分成几等份,如100。
  • suffix: 进度百分比显示的格式,默认 ‘%(index)d/%(max)d’ 。
  • fill: 进度条用什么填充,默认’#’ 。
  • empty_fill: 未加载的进度条用什么填充,默认空格’ ’ 。
  • bar_prefix: 进度条前缀,默认’ |’ 。
  • bar_suffix: 进度条后缀,默认’| ’ 。
  • color: 进度条的颜色,默认None。

PyCharm进度条显示问题解决

大部分Python程序员都使用PyCharm,如果在PyCharm中运行进度条代码后没有显示进度条效果,可以按照如下步骤设置,再重新运行代码。

Step1. 点击PyCharm上方的 Run 按钮,然后点击 Edit Configurations,进入运行配置页面。

Step2. 将 Emulate terminal in output console 选项打钩,然后重新运行代码。

细心的小伙伴应该发现了,上面的进度条代码在PyCharm中运行完成后,进度条下有一串奇怪的字符: ‘?[?25h’ ,在终端中用脚本方式 python progress_demo.py 运行相同的代码,不会有这串符号。

这串字符表示的是光标,在PyCharm中运行完成后,光标被输出在控制台上了。解决方法为:按住 Ctrl 键,点击导入的 Bar 类名,跳转到源码 bar.py 中,再按住 Ctrl 键点击 Bar 类继承的 Progress 类,进入 progress 库的 __init__.py 文件中,将该文件中的 SHOW_CURSOR 变量改为空字符串。

修改源码后再重新运行代码,光标不显示了,那一串字符也就不显示了。

在PyChram中运行进度条,还可能会遇到其他显示问题,建议出现问题时,用脚本的方式运行,以脚本运行的结果为准,PyChram中运行只用来调试代码。

进度条代码的另外两种写法

1. 上下文管理器: 使用 with … as … 上下文管理器的方式编写进度条,进度条完成后无需调用 finish() 方法。

with Bar('Processing', max=20) as bar:
    for i in range(20):
        time.sleep(0.05)
        bar.next()

2. 使用 iter() 方法: 使用 iter() 方法可以简化迭代器的工作,不需要调用 next() 方法。

for i in Bar('Processing').iter(range(100)):
    time.sleep(0.05)

这两种实现方式执行的结果与最开始的实现方式一样。

实现更多种类的进度条

1. Bar 系列

前文中点进了progress的源码,可以看到 Bar 类继承自 Progress 类,Progress 类继承自 Infinite 类,Progress 类和 Infinite 类实现了进度条的基本功能。

在 bar.py 中,除了 Bar 类,还有6个类,ChargingBar, FillingSquaresBar, FillingCirclesBar, IncrementalBar, PixelBar, ShadyBar,它们分别是 Bar 类的子类或孙类,继承了进度条的功能,在每一个类中只是修改了 suffix, fill, empty_fill, bar_prefix, bar_suffix这些变量的值,修改了进度条的样式。

使用很简单,只需要导入这些类,将上面代码中的 Bar 换成这些类就行了,如 FillingSquaresBar。

from progress.bar import Bar, ChargingBar, FillingSquaresBar, FillingCirclesBar, IncrementalBar, PixelBar, ShadyBar
import time

bar = FillingSquaresBar('MyProcess:', max=100)
for i in range(100):
    time.sleep(0.05)
    bar.next()
bar.finish()

运行效果:

还可以自己修改上面的参数,设置个性化的进度条,本文暂不扩展,以后有空可以专门写文章介绍。

2. Spinner 系列

progress 库的 spinner.py 中实现了 5 个类,Spinner, PieSpinner, MoonSpinner, LineSpinner, PixelSpinner。

from progress.spinner import Spinner, PieSpinner, MoonSpinner, LineSpinner, PixelSpinner

for i in Spinner('MySpinner:').iter(range(100)):
    time.sleep(0.01)

运行效果:

3.Counter 系列

progress 库的 counter.py 中实现了 4 个类,Counter, Countdown, Stack, Pie。

from progress.counter import Counter, Countdown, Stack, Pie
import time

for i in Counter('Loading:').iter(range(100)):
    time.sleep(0.01)

运行效果:

汇总

接下来将上面介绍的所有种类的进度条全部放到一起,代码如下:

from progress.bar import Bar, ChargingBar, FillingSquaresBar, \
    FillingCirclesBar, IncrementalBar, PixelBar, ShadyBar
from progress.spinner import Spinner, PieSpinner, MoonSpinner, LineSpinner, PixelSpinner
from progress.counter import Counter, Countdown, Stack, Pie
import time
import random

progess_list = [Bar, ChargingBar, FillingSquaresBar, FillingCirclesBar, IncrementalBar,
                PixelBar, ShadyBar, Spinner, PieSpinner, MoonSpinner, LineSpinner,
                PixelSpinner, Counter, Countdown, Stack, Pie]
for P in progess_list:
    for i in P(P.__name__ + ':').iter(range(100)):
        time.sleep(0.01)

bar = IncrementalBar('Random:', suffix='%(index)d%%')
for i in range(100):
    bar.goto(random.randint(0, 100))
    time.sleep(0.01)
bar.finish()

运行效果:

运行代码后可以得出所有种类的进度条,与文章开头从官网截的图效果相同。

到此这篇关于一文教你用Python中progress库实现进度条的文章就介绍到这了,更多相关Python progress进度条内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Python验证码识别

    详解Python验证码识别

    这几天在写一个程序的时候需要识别验证码,因为程序是Python写的自然打算用Python进行验证码的识别。下面把实现思路分享在脚本之家平台,感兴趣的朋友可以参考下
    2016-01-01
  • TensorFlow可视化工具TensorBoard默认图与自定义图

    TensorFlow可视化工具TensorBoard默认图与自定义图

    这篇文章主要介绍了TensorFlow可视化工具TensorBoard默认图与自定义图的使用操作示例,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • Python3.8中使用f-strings调试

    Python3.8中使用f-strings调试

    这篇文章主要介绍了Python3.8中使用f-strings调试的相关知识,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • Python音乐爬虫完美绕过反爬

    Python音乐爬虫完美绕过反爬

    这篇文章主要介绍了Python音乐爬虫完美绕过反爬的过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Python中如何优雅的合并两个字典(dict)方法示例

    Python中如何优雅的合并两个字典(dict)方法示例

    字典是Python语言中唯一的映射类型,在我们日常工作中经常会遇到,下面这篇文章主要给大家介绍了关于Python中如何优雅的合并两个字典(dict)的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • Python深度学习albumentations数据增强库

    Python深度学习albumentations数据增强库

    下面开始albumenations的正式介绍,在这里我强烈建议英语基础还好的读者去官方网站跟着教程一步步学习,而这里的内容主要是我自己的一个总结以及方便英语能力较弱的读者学习
    2021-09-09
  • Python实现Word和TXT文件格式之间的相互转换

    Python实现Word和TXT文件格式之间的相互转换

    Word文档(.doc或.docx)和纯文本文件(.txt)是两种常用的文件格式,本文将详细介绍如何使用Python实现Word和TXT文件格式之间的相互转换,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2024-07-07
  • Python实现遍历子文件夹并将文件复制到不同的目标文件夹

    Python实现遍历子文件夹并将文件复制到不同的目标文件夹

    这篇文章主要介绍了如何基于Python语言实现遍历多个子文件夹,将每一个子文件夹中大量的文件,按照每一个文件的文件名称的特点复制到不同的目标文件夹中,感兴趣的可以了解下
    2023-08-08
  • Python进行数据科学工作的简单入门教程

    Python进行数据科学工作的简单入门教程

    这篇文章主要介绍了Python进行数据科学工作的简单入门教程,主要针对Python发行版Anaconda进行说明,需要的朋友可以参考下
    2015-04-04
  • Django 大文件下载实现过程解析

    Django 大文件下载实现过程解析

    这篇文章主要介绍了Django 大文件下载实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08

最新评论