当前位置:   article > 正文

python使用tqdm库实现进度条详解_pbar

pbar

python实现进度条

有时候在使用Python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进行可视化展示,以便我们能够及时了解情况。这对于第三方库非常丰富的Python来说,想要实现这一功能并不是什么难事。

tqdm就能非常完美的支持和解决这些问题,可以实时输出处理进度而且占用的CPU资源非常少,支持循环处理、多进程、递归处理、还可以结合linux的命令来查看处理情况,等进度展示。

tqdm在阿拉伯语中的意思是“进展”,是python中一个快速、扩展性强的进度条工具库,能让我们了解代码的运行进度,也能让我们的运行结果看起来显得更加美观而又高大上!!

先来看一下进度条的效果。

示例代码:

  1. from tqdm import tqdm
  2. for i in tqdm(range(int(9e7))):
  3. pass

运行结果:

可以看到,当我们的代码的运行需要较长时间时,进度条可以很好的帮助我们了解整个代码的运行进度。

一、tqdm相关操作

1、迭代对象处理

对于可以迭代的对象都可以使用下面这种方式,来实现可视化进度,非常方便。

示例代码:

  1. import time
  2. from tqdm import tqdm
  3. for i in tqdm(range(100)):
  4. time.sleep(0.1)
  5. pass

运行结果:

2、观察处理的数据

通过tqdm提供的set_description方法可以实时查看每次处理的数据。

示例代码:

  1. import time
  2. from tqdm import tqdm
  3. pbar = tqdm(["A", "B", "C", "D", "E", "F"])
  4. for i in pbar:
  5. time.sleep(1)
  6. pbar.set_description("Processing %s" % i)

运行结果:

3、pandas中使用tqdm

pandas中对大量数据进行相关操作或者遍历表格的行列时,我们可以使用tqdm来了解代码运行情况。

示例代码:

  1. import time
  2. import pandas as pd
  3. from tqdm import tqdm
  4. df = pd.DataFrame({
  5. 'Month': [1, 2, 3, 4, 5, 2, 3, 4, 5, 1, 2, 3, 4],
  6. 'Name': ['张三', '张三', '张三', '张三', '张三', '李四', '李四', '李四', '李四', '王五', '王五', '王五', '王五'],
  7. 'Sex': ['男', '男', '女', '女', '女', '男', '男', '男', '男', '女', '女', '女', '女']
  8. })
  9. for i in tqdm(['Month', 'Name', 'Sex']):
  10. time.sleep(2)
  11. pass

运行结果:

4、多进程进度条

在使用多进程或者嵌套循环处理任务的时候,我们通过tqdm可以实时查看每一个进程任务的处理情况

示例代码:

  1. import time
  2. from tqdm import tqdm
  3. for i in tqdm(range(5), ascii=False, desc="1st process"):
  4. # ascii = True 时为##
  5. for j in tqdm(range(5), ascii=True, desc="2st process"):
  6. time.sleep(0.1)

运行结果:

python使用进程池来实现进度条的展示。

示例代码:

  1. from multiprocessing.pool import ThreadPool
  2. import time
  3. from tqdm import tqdm
  4. def func():
  5. time.sleep(1)
  6. pbar.update()
  7. pool = ThreadPool(5)
  8. with tqdm(total=100) as pbar:
  9. for i in range(100):
  10. pool.apply_async(func)
  11. pool.close()
  12. pool.join()

运行结果:

python使用线程池来展示进度条,其中一种方法详见博文:

python使用多线程来执行函数_IT之一小佬的博客-CSDN博客

5、自定义进度条显示信息

通过update方法可以控制每次进度条更新的进度。

示例代码1:

  1. import time
  2. from tqdm import tqdm
  3. # total参数设置进度条的总长度为100
  4. with tqdm(total=100) as pbar:
  5. for i in range(100):
  6. time.sleep(0.1)
  7. # 每次更新进度条的长度为1
  8. pbar.update(1)

运行结果:

示例代码2:

  1. import time
  2. from tqdm import tqdm
  3. # total参数设置进度条的总长度为500
  4. with tqdm(total=500) as pbar:
  5. for i in range(100):
  6. time.sleep(0.1)
  7. # 每次更新进度条的长度为3
  8. pbar.update(3)

运行结果:

除了上述方法之外,我们还能通过另外一种方法来实现操作。

示例代码3:

  1. import time
  2. from tqdm import tqdm
  3. # total参数设置进度条的总长度为100
  4. pbar = tqdm(total=100)
  5. for i in range(100):
  6. time.sleep(0.1)
  7. # 每次更新进度条的长度为1
  8. pbar.update(1)
  9. # 关闭占用的资源
  10. pbar.close()

运行结果:

另外,我们还能通过set_descriptionset_postfix方法设置进度条显示信息。

示例代码:

  1. import time
  2. from tqdm import trange
  3. from random import random, randint
  4. with trange(100) as t:
  5. for i in t:
  6. # 设置进度条左边显示的信息
  7. # 注意:代码中的GEN是可以手动换成其它内容的
  8. t.set_description("GEN %i" % i)
  9. # 设置进度条右边显示的信息
  10. # 注意:此处代码中的gen lr lst是可以手动换成其它内容的
  11. t.set_postfix(loss=random(), gen=randint(1, 999), lr="h", lst=[1, 2])
  12. time.sleep(0.1)

运行结果:

令人震惊的是,当我们将进度条显示的信息设置中文时,竟然不会出现乱码!!!!

示例代码:

  1. import time
  2. from tqdm import trange
  3. from random import random, randint
  4. with trange(100) as t:
  5. for i in t:
  6. # 设置进度条左边显示的信息
  7. # 注意:代码中的GEN是可以手动换成其它内容的
  8. t.set_description("进度 %i" % i)
  9. # 设置进度条右边显示的信息
  10. # 注意:此处代码中的gen lr lst是可以手动换成其它内容的
  11. t.set_postfix(损失=random(), 随机=randint(1, 999), 名字="h", 列表=[1, 2])
  12. time.sleep(0.1)

运行结果:

6.tqdm(range(n))替换为trange(n)

我们在使用tqdm的时候,可以将tqdm(range(n))替换为trange(n),让你的代码看起来更加简洁而又高大上!

示例代码:

  1. from tqdm import trange
  2. import time
  3. for i in trange(100):
  4. time.sleep(0.1)
  5. pass

运行结果:

7.在jupyter notebook中使用进度条tqdm:

示例代码1:

  1. import time
  2. from tqdm import tqdm
  3. for i in tqdm(range(100)):
  4. print("I'm tqdm!", end=' ')
  5. time.sleep(0.1)

运行结果:

示例代码2:

  1. import time
  2. from tqdm import tqdm_notebook
  3. for i in tqdm_notebook(range(100), desc="demo"):
  4. time.sleep(0.1)
  5. print("I'm tqdm_notebook!", end=' ')

运行结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/243178?site
推荐阅读
相关标签
  

闽ICP备14008679号