Python进度条神器tqdm使用实例详解

 更新时间:2023年06月05日 08:18:55   作者:落阳呀  
Python进度条神器tqdm是一个快速、可扩展的进度条工具,可以轻松地为Python脚本添加进度条。它可以在循环中自动计算进度,并在终端中显示进度条,让用户了解程序的运行情况。tqdm还支持多线程和多进程,并且可以自定义进度条的样式和显示方式。

各位Python高手,今天我要给大家介绍一个好用的库,它就是:tqdm

tqdm在阿拉伯语中的意思是 "进展",所以这个库也被称为 "快速进展条"。不得不说,这个名字真的很有创意!

让我们想象一下,你正在运行一个耗时的数据处理任务或者训练一个复杂的深度学习模型。你坐在那里,盯着屏幕,焦急地等待程序完成。这种等待的痛苦,我想你我都有切身体会。这时候,有个可视化的进度条会不会让你感觉好很多呢?这就是我们今天要推荐的 tqdm 库的功能。

tqdm 是一个 Python 快速、可扩展的进度条工具库,它有很多优点:

易于使用:只需在 Python 循环中包裹你的迭代器,一行代码就能产生一个精美的进度条。

灵活:它可以和 for 循环、pandas dataframe的 apply 函数以及 Python 的 map 函数等等配合使用。

高效:tqdm 使用了智能算法,即使在数据流非常快的情况下,也不会拖慢你的代码速度。

让我们看一下 tqdm 在机器学习任务中的应用示例:

from tqdm import tqdm
import time
for i in tqdm(range(100)):
    # 假设我们正在进行一些耗时的操作,比如训练深度学习模型
    time.sleep(0.01)

运行这段代码,你会看到一个动态更新的进度条。tqdm 会告诉你还有多少项需要处理,预计剩余时间,以及当前的处理速度。

你会看到一个动态更新的进度条。tqdm 会告诉你还有多少项需要处理,预计剩余时间,以及当前的处理速度。

100%|██████████| 100/100 [00:01<00:00, 97.31it/s]

我们继续深入到 tqdm 的更多使用场景和用法。

01

你是否曾在下载大文件时,想要知道下载的进度呢?tqdm 可以很好地满足你的需求。看看下面的代码:

import requests
from tqdm import tqdm
response = requests.get(url, stream=True)  # 把stream参数设置为True
file_size = int(response.headers['Content-Length'])
chunk = 1
chunk_size = 1024
num_bars = int(file_size / chunk_size)
with open(filename, 'wb') as fp:
    for chunk in tqdm(response.iter_content(chunk_size=chunk_size), total=num_bars, unit='KB', desc=filename, leave=True): 
        fp.write(chunk)

在上面的代码中,我们首先获取到要下载文件的大小。然后,我们在 tqdm 中设置总的进度条数目为文件大小除以每个进度条代表的字节数。这样,当我们下载每一个字节块并写入文件时,tqdm 就会自动更新进度条。

02

在机器学习中,我们经常需要对大规模的数据进行预处理。使用 tqdm,我们可以很直观地看到数据预处理的进度。

import pandas as pd
from tqdm import tqdm
tqdm.pandas()
# 假设我们有一个大的 dataframe,我们想要对其 'text' 列进行一些预处理
df['processed_text'] = df['text'].progress_apply(lambda x: preprocess(x))

在上面的代码中,我们首先通过 tqdm.pandas() 方法对pandas 进行 patch。然后,我们就可以在 pandas 的 apply 方法中使用 progress_apply,这样就可以在数据处理的同时显示进度条。

03

在训练深度学习模型时,我们经常需要迭代大量的 epochs。使用 tqdm,我们可以清晰地看到模型训练的进度。

from tqdm import tqdm
# 假设我们有一个训练数据集 train_dataloader 和一个模型 model
for epoch in range(num_epochs):
    epoch_iterator 
= tqdm(train_dataloader, desc=
"Training (Epoch %d)"
 % epoch)
    
    for step, batch in enumerate(epoch_iterator):
        # 模型训练的代码
        # ...

04

在许多情况下,我们的代码可能包含嵌套循环。在这种情况下,我们可以使用 tqdm 创建多个进度条。

from tqdm import tqdm
import time
for i in tqdm(range(100), desc="Outer loop"):
    for j in tqdm(range(10), desc="Inner loop", leave=False):
        # 执行一些耗时的操作
        time.sleep(0.01)

在这段代码中,我们创建了两个进度条,一个用于外部循环,一个用于内部循环。leave=False 选项将在内部循环结束后删除内部循环的进度条。

05

有时候,我们可能需要手动更新进度条。例如,当我们在下载文件或处理批量数据时,我们可能一次处理多个项目。在这种情况下,我们可以使用 update 方法。

from tqdm import tqdm
import time
with tqdm(total=100) as pbar:
    for i in range(10):
        # 执行一些耗时的操作
        time.sleep(0.1)
        pbar.update(10)

在这段代码中,我们首先创建了一个进度条,然后在循环中使用 update 方法手动更新进度条的值。

总结:

本文介绍了Python进度条神器tqdm的使用方法和实例。tqdm是一个非常实用的工具,可以帮助我们更好地了解程序的运行情况,提高代码的可读性和可维护性。在使用tqdm时,我们需要注意以下几点:

  1. 在循环中使用tqdm时,需要将可迭代对象作为参数传递给tqdm函数。
  2. 可以通过设置参数来自定义进度条的样式和显示方式。
  3. 如果需要在多线程或多进程中使用tqdm,需要使用tqdm的并发版本。
  4. 在使用tqdm时,需要注意进度条的更新频率,避免过于频繁地更新进度条,影响程序的性能。

总之,tqdm是一个非常实用的工具,可以帮助我们更好地了解程序的运行情况,提高代码的可读性和可维护性。

以上就是 tqdm 的一些更深入的用法。你应该可以看出 tqdm 是一个非常强大的工具,无论你在做什么,只要你需要等待,就可以使用 tqdm。希望你可以在你的代码中尝试使用 tqdm,看看它如何提升你的编程体验。希望本文能够对大家学习和使用tqdm有所帮助。

相关文章

  • 修改Python的pyxmpp2中的主循环使其提高性能

    修改Python的pyxmpp2中的主循环使其提高性能

    这篇文章主要介绍了修改Python的pyxmpp2中的主循环使其提高性能,pyxmpp2是Python中使用需XMPP协议的一个常用工具,要的朋友可以参考下
    2015-04-04
  • tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T

    tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU

    这篇文章主要介绍了tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • python如何保证输入键入数字的方法

    python如何保证输入键入数字的方法

    今天小编就为大家分享一篇python如何保证输入键入数字的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python的函数使用介绍

    Python的函数使用介绍

    这篇文章主要介绍了Python的函数使用,在两种python循环语句的使用中,不仅仅是循环条件达到才能跳出循环体。所以,在对python函数进行阐述之前,先对跳出循环的简单语句块进行介绍,需要的朋友可以参考一下
    2021-12-12
  • 详解Python调试神器之PySnooper

    详解Python调试神器之PySnooper

    在程序开发过程中,代码的运行往往会和我们预期的结果有所差别。于是,我们需要清楚代码运行过程中到底发生了什么?代码哪些模块运行了,哪些模块没有运行?输出的局部变量是什么样的?PySnooper,能够大大减少调试过程中的工作量
    2021-11-11
  • python实现会员信息管理系统(List)

    python实现会员信息管理系统(List)

    这篇文章主要为大家详细介绍了python实现会员信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • python实现简单遗传算法

    python实现简单遗传算法

    这篇文章主要为大家详细介绍了python实现简单的遗传算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Python小红书旋转验证码识别实战教程

    Python小红书旋转验证码识别实战教程

    这篇文章主要介绍了Python小红书旋转验证码识别实战教程,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-08-08
  • Pyspider进行API接口抓取和数据采集的实现

    Pyspider进行API接口抓取和数据采集的实现

    Pyspider是一个基于Python的强大的网络爬虫框架,它提供了丰富的功能和灵活的扩展性,使我们可以轻松地进行数据的抓取和处理,本文主要介绍了Pyspider进行API接口抓取和数据采集的实现,感兴趣的可以了解一下
    2023-09-09
  • Flask框架编写文件下载接口过程讲解

    Flask框架编写文件下载接口过程讲解

    这篇文章主要介绍了Flask框架编写文件下载接口的过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01

最新评论