文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

让你的程序炫起来!少有人知道但超酷的Python进度条开源库

2024-12-03 06:51

关注

现在,alive-progress 来了,它是一个 Python 下的进度条库,不仅使用方便而且支持多种炫酷显示效果!让我们先来看看示例效果:

 

 

下面让我们一起玩转这个库!

一、安装

在 Python 下使用 pip 进行安装:

 

  1. pip install alive-progress 

二、快速入门

2.1 直接使用

在循环中使用 alive-progress 是最常见的用法,脚本可以这样写:

 

  1. # 导入 alive-progress 库 
  2. from alive_progress import alive_bar 
  3. import time 
  4.  
  5. # 使用 with 语句创建一个进度条 
  6. with alive_bar(100) as bar: # 给 alive_bar 传入进度条总数目(这里是 100) 
  7.     for item in range(100): 
  8.         # 等待 1s 
  9.         time.sleep(.1) 
  10.         #更新进度条,进度 +1 
  11.         bar() 

请注意,如果无法正常显示动画则尝试在 alive_bar 中加上 force_tty=True 参数。

运行以上代码我们可以看到在终端中出现了一个还算华丽的动态进度条:

 

 

需要注意的是 alive-progress 并不像 tqdm 等进度条库一样会自动更新,只有我们程序调用了 bar 才会让进度条 +1

当然,我们也可以不给进度条传入总数目这个参数,此时进度条将不显示进度,并进入未定义模式:

 

 

有时候我们想直接操纵显示的位置,这时候可以设定 alive_bar 的 manual 参数为 True:

 

  1. from alive_progress import alive_bar 
  2. import time 
  3.  
  4. total = 100 
  5. with alive_bar(total, manual=Trueas bar: # total 可以不指定,这时候只有百分比 
  6.     bar(0.5) # 进度到 50% 
  7.     time.sleep(0.5) 
  8.     bar(0.1) # 进度到 10%  
  9.     time.sleep(0.5) 
  10.     bar(0.75) # 进度到 75% 
  11.     time.sleep(0.5) 
  12.     bar(1.0) # 进度到 100% 
  13.     time.sleep(0.5) 
  14.     bar(10) # 进度到 1000% 
  15.     for i in range(1,101): 
  16.         bar(i/100) # 设定进度为 i% 
  17.         time.sleep(0.05) 

 

 

 

当然,在运行过程中我们也需要输出一些提示信息,直接使用 print 可以在不破坏进度条的情况下输出一行提示信息,text 方法则可以在进度条尾部添加后缀字符,而 title 参数则可以给进度条添加(前缀信息),具体使用方法及效果如下:

 

  1. from alive_progress import alive_bar 
  2. import time 
  3.  
  4. # 定义(前缀字符)为 HelloGitHub 
  5. with alive_bar(10, title="HelloGitHub"as bar: 
  6.     for i in range(10): 
  7.         time.sleep(1) 
  8.  
  9.         bar()   # 让进度 +1 
  10.         bar.text("Doning Work #%d"%(i+1))   # 更新进度条后缀 
  11.  
  12.         print("Work #%d finished"%i)        # 输出一行信息 

 

 

 

2.2 添点花样

看多了传统的进度条样式想换换花样?没问题,alive-progress 不仅内置了多种进度条样式,还支持自定义格式。

进度条可以自定义的样式分为两种:bar 和 spinner,只需要在调用 alive_bar 的时候传入对应的参数即可。

 

 

以这个进度条为例,中间最长的是 bar,旁边来回晃动的 www.HelloGitHub.com 是 spinner。

alive-progress 内置了多种 bar 和 spinner 样式,只需要调用 show_bars 或者 show_spinners 即可快速预览相应的样式,例如:

 

  1. from alive_progress import show_bars 
  2.  
  3. show_bars() # 查看内置 bar 样式 

 

 

 

 

  1. from alive_progress import show_spinners 
  2. show_spinners() # 查看内置 spinner 样式 

 

 

 

默认样式使用起来非常简单,例如我想使用 bubbles 这个 bar 和 message_scrolling 这个 spinner,直接传入对应名称即可:

 

  1. from alive_progress import alive_bar 
  2. import time 
  3.  
  4. # 直接传入对应名字即可 
  5. with alive_bar( 
  6.             100, 
  7.             title="HelloGitHub",  
  8.             bar="bubbles", spinner="message_scrolling" 
  9.             ) as bar: 
  10.  
  11.     for i in range(100): 
  12.         time.sleep(.1) 
  13.         bar() 

 

 

 

如果不知道 total 的数目,可以使用 unknown 参数(这时候将替换 bar 为 spinner):

 

  1. from alive_progress import alive_bar 
  2. import time 
  3.  
  4. with alive_bar( 
  5.             title="HelloGitHub",  
  6.             # 注意:这里 bar 被换成了unknow,内置样式名称与 spinner 的相同 
  7.             unknown="stars", spinner="message_scrolling" 
  8.             ) as bar: 
  9.  
  10.     for i in range(100): 
  11.         time.sleep(.1) 
  12.         bar() 

 

 

 

三、私人定制

或许比起直接使用内置模板你更喜欢自己定制的进度条,对此 alive-progress 也提供了对应方法。

3.1 定制 bar

使用 standard_bar_factory 方法可以快速定制 bar,bar 可以设置的参数有五个:

例如我们想做一个如图所示的 bar:

 

 

则可以这样来写:

 

  1. from alive_progress import alive_bar, standard_bar_factory 
  2. import time 
  3.  
  4. ##-------自定义 bar-------## 
  5. my_bar = standard_bar_factory( # 以下参数均有默认值,不必一次全部修改 
  6.                             chars="123456789#", # 加载时根据进度依次显示,长度任意 
  7.                             borders="<>",  # bar 两头的边界 
  8.                             background=".",  # 未加载部分用 "." 填充 
  9.                             tip=">",   # 指示进度方向的引导符号(分割 "#" 与 "."
  10.                             errors="⚠❌" # 发生错误时显示的内容(未完成,溢出)  
  11.                             ) 
  12. ##-------自定义结束-------## 
  13.  
  14. ##--------动画演示-------## 
  15. with alive_bar( 
  16.             10, 
  17.             title="HelloGitHub",  
  18.             bar=my_bar, # 这里传入刚刚自定义的 bar 
  19.       spinner="message_scrolling"
  20.             manual=True 
  21.             ) as bar: 
  22.  
  23.     for i in range(50): 
  24.         time.sleep(.1) 
  25.         bar(i/100) 
  26.     bar(.5) 
  27.     time.sleep(2) 
  28.     bar(10) 
  29.     print("上溢"
  30.     time.sleep(1) 
  31.     bar(1) 
  32.     print("100% 完成"
  33.     time.sleep(1) 
  34.     bar(.1) 
  35.     print("未完成"

 

3.2 定制 spinner

对于 spinner,alive-progress 提供了更多种的动画定义方式:

frame_spinner_factory:将传入的字符串挨个输出:

 

  1. from alive_progress import alive_bar, frame_spinner_factory 
  2. import time 
  3.  
  4. my_spinner = my_spinner = frame_spinner_factory( 
  5.                                 r'-----'
  6.                                 r'1----'
  7.                                 r'-2---'
  8.                                 r'--3--'
  9.                                 r'---4-'
  10.                                 r'----5' 
  11.                                 ) # 直接传入字符串 
  12.  
  13. with alive_bar( 
  14.             title="HelloGitHub"
  15.             spinner=my_spinner 
  16.             ) as bar: 
  17.  
  18.     while True
  19.         bar() 
  20.         time.sleep(.1) 

 

 

 

可以看到字符串挨个循环输出。

scrolling_spinner_factory:将字符串滚动播出

 

  1. from alive_progress import alive_bar, scrolling_spinner_factory 
  2. import time 
  3.  
  4. my_spinner = scrolling_spinner_factory( 
  5.                                     chars="HelloGitHub", # 想要播放的字符串 
  6.                                     length=15, # spinner 区域宽度 
  7.                                     blank='.' # 空白部分填充字符 
  8.                                     ) 
  9.  
  10. with alive_bar( 
  11.             title="HelloGitHub"
  12.             spinner=my_spinner 
  13.             ) as bar: 
  14.  
  15.     while True
  16.         bar() 
  17.         time.sleep(.1) 

 

 

 

bouncing_spinner_factory:将两个字符串交替滚动播出

 

  1. from alive_progress import alive_bar, bouncing_spinner_factory 
  2. import time 
  3.  
  4. my_spinner = bouncing_spinner_factory( 
  5.                                     right_chars="I love", # 从左边进入的字符串 
  6.                                     length=15, # spinner 区域长度 
  7.                                     left_chars="HelloGitHub", # 从右边进入的字符串 
  8.                                     blank='.',  # 空白区域填充字符 
  9.                                     ) 
  10.  
  11. with alive_bar( 
  12.             title="HelloGitHub"
  13.             spinner=my_spinner 
  14.             ) as bar: 
  15.  
  16.     while True
  17.         bar() 
  18.         time.sleep(.1) 

 

 

 

当然,也可以省略 left_chars 这个参数,其效果相当于 I love 将会像弹球一样左右弹动。

unknown_bar_factory:将 spinner 转换为能使用在未定义模式中的格式:

 

  1. from alive_progress import alive_bar, unknown_bar_factory, bouncing_spinner_factory 
  2. import time 
  3.  
  4. my_spinner = bouncing_spinner_factory("www.HelloGitHub.com",15,hiding=False
  5.  
  6. my_unknown_bar = unknown_bar_factory(my_spinner) # 传入定义的 spinner 
  7. with alive_bar( 
  8.             title="HelloGitHub"
  9.             unknown=my_unknown_bar 
  10.             ) as bar: 
  11.  
  12.     while True
  13.         bar() 
  14.         time.sleep(.1) 

 

 

 

四、结尾

到这里,相信你已经掌握了 alive_progress 的基本玩法,alive-progress 还提供了一些在不同场合所需的特殊功能,有兴趣的朋友可以通过阅读官方文档或源代码进行更加深入的了解。

 

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯