暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python进度条

细说数据 2021-06-28
3980
这期来讲一下Python进度条,在日常执行python的时候,经常不知道python到底执行到哪一步了,还剩多少时间才能执行完,这时候加上进度条就非要有用了。

1、手写进度条

依赖于time.perf_counter()计算时间、\r实现回车功能,end = ""实现不换行,用于连接下一条的print输出内容。
import time
scale = 50
print("开始执行".center(scale 2,"-"))
start = time.perf_counter()
for i in range(scale + 1):
a = "*" * i
b = "." * (scale - i)
c = (i scale) * 100
dur = time.perf_counter() - start
print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end = "")
time.sleep(0.1)

print("\n"+"执行结束".center(scale 2,"-"))

2、Tqdm

tqdm是Python中专门用于进度条美化的模块,通过在非while的循环体内嵌入tqdm,可以得到一个能更好展现程序运行过程的提示进度条。
import time
from progress.bar import IncrementalBar
mylist = [1,2,3,4,5,6,7,8]
bar = IncrementalBar('Countdown', max = len(mylist))
for item in mylist:
bar.next()
time.sleep(1)
bar.finish()

tqdm模块参数

class tqdm():
"""
Decorate an iterable object, returning an iterator which acts exactly
like the original iterable, but prints a dynamically updating
progressbar every time a value is requested.
"""


def __init__(self, iterable=None, desc=None, total=None, leave=True,
file=None, ncols=None, mininterval=0.1,
maxinterval=10.0, miniters=None, ascii=None, disable=False,
unit='it', unit_scale=False, dynamic_ncols=False,
smoothing=0.3, bar_format=None, initial=0, position=None,
postfix=None, unit_divisor=1000)
:


tqdm针对jupyter notebook添加了专门的进度条美化方法

from tqdm.notebook import tqdm
import time

for i in tqdm(range(100),desc='example:'):
time.sleep(0.01)

3、progressbar2

ProgressBar 类管理当前的进度,行的格式由许多小部件给出。小部件是一个对象,它可能会根据进度条的状态显示不同,例如timer、ETA、AdaptiveETA、等等。
import progressbar
bar = progressbar.ProgressBar(widgets=[
' [', progressbar.Timer(), '] ',
progressbar.Bar(),
' (', progressbar.ETA(), ') ',
])
for i in bar(range(100)):
time.sleep(0.1)

4、progress

有七种progress bars选择,Bar、ChargingBar、FillingSquaresBar、FillingCirclesBar、IncrementalBar、PixelBar、ShadyBar
from progress.bar import Bar
bar = Bar('Processing', max=20)
for i in range(20):
# Do some work
bar.next()
bar.finish()

5、alive_progress

一个带有动态反馈的进度条,看起来比较炫酷。alive-progress 内置了多种 bar 和 spinner 样式,只需要调用show_bars或者show_spinners即可快速预览相应的样式,bar和spinner可定制。
from alive_progress import show_bars
show_bars() # 查看内置 bar 样式
from alive_progress import show_spinners
show_spinners()# 查看内置 spinner 样式

alive_progress的一些特点,当前速度动态视觉反馈,根据实际处理速度运行得更快或更慢;预期到达时间 ( ETA ),采用智能指数平滑算法,以最友好的方式显示剩余处理时间。
import time
from alive_progress import alive_bar
# retrieve your set of items
items = range(100)
# declare your expected total
with alive_bar(len(items)) as bar:
# iterate as usual
for item in items:
# process each item
bar()
time.sleep(0.1)

6、PySimpleGUI

PySimpleGUI基于Tkinter、Remi、wxPython和PyQt。Remi将应用程序的界面转换为HTML以在Web浏览器中呈现的图形界面库。
import PySimpleGUI as sg
import time
mylist = [1,2,3,4,5,6,7,8]
for i, item in enumerate(mylist):
sg.one_line_progress_meter('This is my progress meter!', i+1, len(mylist), '-key-')
time.sleep(1)

7、rich

rich可以很容易的在终端输出添加各种颜色和不同风格。rich 还可以绘制漂亮的表格、进度条、markdown,突出显示语法的源代码及回溯等等。
from rich.progress import track
def do_step(step):
time.sleep(0.1)
for step in track(range(100)):
do_step(step)


参考文档:

https://pypi.org/project/tqdm/ 

https://tqdm.github.io/ 

https://pypi.org/project/progressbar2/ 

https://progressbar-2.readthedocs.io/en/latest/ 

https://pypi.org/project/progress/1.5/ 

https://github.com/rsalmei/alive-progress 

https://pysimplegui.readthedocs.io/en/latest/ 

https://github.com/willmcgugan/rich


文章转载自细说数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论