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字符串编码转换 encode()和decode()方法详细说明

    Python字符串编码转换 encode()和decode()方法详细说明

    这篇文章主要介绍了Python字符串编码转换 encode()和decode()方法详细的说明,下面文章围绕encode()和decode()方法的相相关资料展开内容,具有一定的价值,需要的朋友卡通参考一下
    2021-12-12
  • python 实现超级玛丽游戏

    python 实现超级玛丽游戏

    这篇文章主要介绍了python 实现超级玛丽游戏,帮助大家更好的理解和使用python开发游戏,感兴趣的朋友可以了解下
    2020-11-11
  • Python教程之全局变量用法

    Python教程之全局变量用法

    这篇文章主要介绍了Python教程之全局变量用法,结合实例形式分析了Python全局变量的定义、修改等使用方法及注意事项,需要的朋友可以参考下
    2016-06-06
  • Python Scrapy实战之古诗文网的爬取

    Python Scrapy实战之古诗文网的爬取

    本文将利用Python中Scrapy框架,实现爬取古诗文网上的诗词数据,具体包括诗词的标题信息。文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-05-05
  • python斯皮尔曼spearman相关性分析实例

    python斯皮尔曼spearman相关性分析实例

    这篇文章主要为大家介绍了python斯皮尔曼spearman相关性分析实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Python 的可变和不可变对象详情

    Python 的可变和不可变对象详情

    本文通过详情描述Python 中的可变对象与不可变对象来看两者的区别,刚兴趣的朋友可以参考下文
    2021-08-08
  • python中使用asyncio实现异步IO实例分析

    python中使用asyncio实现异步IO实例分析

    在本篇文章里小编给大家整理的是一篇关于python中使用asyncio实现异步IO实例分析内容,有兴趣的朋友们可以学习下。
    2021-02-02
  • numpy np.newaxis 的实用分享

    numpy np.newaxis 的实用分享

    今天小编就为大家分享一篇numpy np.newaxis 的实用分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • F.conv2d pytorch卷积计算方式

    F.conv2d pytorch卷积计算方式

    这篇文章主要介绍了F.conv2d pytorch卷积计算方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python线程中对join方法的运用的教程

    Python线程中对join方法的运用的教程

    这篇文章主要介绍了Python线程中对join方法的运用,join方法是阻塞线程的基本方法,需要的朋友可以参考下
    2015-04-04

最新评论