各位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 方法手动更新进度条的值。

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

我们的公众号会一直推荐有用的 Python 库和编程技巧,如果你觉得我们的文章有用,请记得关注我们,以便获取更多的内容。让我们一起成为更好的 Python 程序员!

让你的代码动起来:Python进度条神器tqdm详解及应用实例的更多相关文章

  1. Python进度条模块tqdm实现任务进度可视化

    一.前言 tqdm 是一个易用性强.扩展性高的 Python 进度条库,可以在 Python 长循环中添加一个进度提示信息,我们只需要封装任意的迭代器 tqdm(iterator) 即可. 二.安装 ...

  2. Python - 进度条库 tqdm

    前言 在写生成器的时候,网上看到一个进度条库,感觉蛮有意思,记录下 这个库感觉只有在调试的时候会用到,不做深入学习 内置库,不需要安装 示例代码 from tqdm import tqdm for i ...

  3. 2019年的代码都写完了吗?不如做个Python进度条看看还剩多少

    我们都知道,进度条是用来直观展示流程所需时间的优秀工具,以免我们担心流程会突然挂掉,而且我们可以用它来预测代码运行是否正常,借助进度条,每个人都能直观地看到脚本最新的进展情况. 如果你之前没用过进度条 ...

  4. tqdm:Python 进度条

    Tqdm 是 Python 进度条库,可以在 Python 长循环中添加一个进度提示信息.用户只需要封装任意的迭代器,是一个快速.扩展性强的进度条工具库. 用法:tqdm(iterator) 代码地址 ...

  5. 【转】Python进度条tqdm的使用

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

  6. Python安装、配置图文详解(转载)

    Python安装.配置图文详解 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境(I ...

  7. 【和我一起学python吧】Python安装、配置图文详解

     Python安装.配置图文详解 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境( ...

  8. Python中的高级数据结构详解

    这篇文章主要介绍了Python中的高级数据结构详解,本文讲解了Collection.Array.Heapq.Bisect.Weakref.Copy以及Pprint这些数据结构的用法,需要的朋友可以参考 ...

  9. Python中格式化format()方法详解

    Python中格式化format()方法详解 Python中格式化输出字符串使用format()函数, 字符串即类, 可以使用方法; Python是完全面向对象的语言, 任何东西都是对象; 字符串的参 ...

  10. python设计模式之装饰器详解(三)

    python的装饰器使用是python语言一个非常重要的部分,装饰器是程序设计模式中装饰模式的具体化,python提供了特殊的语法糖可以非常方便的实现装饰模式. 系列文章 python设计模式之单例模 ...

随机推荐

  1. 实现hypothesis在网页标注后同步到本地obsidian

    实现hypothesis在网页标注后同步到本地obsidian 遇到的question 2023.3.21日 在更改了自己的模板之后,可以能按照Todo的方式展现所有的标记,但是发现在同一个网页上增加 ...

  2. WordPress回复/评论本文可见

    给WordPress添加一个实用的小功能,那就是回复可见,评论文章才能见到隐藏内容. 在主题目录下找到functions.php文件,在合适位置添加下方的代码: // 回复可见 function re ...

  3. 关于ul点击事件委托给li时的鼠标拖动问题

    网上查看后发现Click可以被两个事件触发:mouseUp与mouseDown,即点击和松开时都会触发一次. 随后当我从一个li点击拖动到其他li松开时,触发的事件对象因为冒泡变成了父元素ul,并非我 ...

  4. 集合-LinkedList 源码分析(JDK 1.8)

    1.概述 LinkedList 是 Java 集合框架中一个重要的实现,其底层采用的双向链表结构.和 ArrayList 一样,LinkedList 也支持空值和重复值.由于 LinkedList 基 ...

  5. Git Commit Message 应该怎么写?

    原文链接: Git Commit Message 应该怎么写? 最近被同事吐槽了,说我代码提交说明写的太差.其实都不用他吐槽,我自己心里也非常清楚.毕竟很多时候犯懒,都是直接一个 -m "f ...

  6. 【杂绪】#4 & 【Diary】CSP-S1 2021 游记(慎) & CSP-S 备赛发狂日记

    减少..减少掉 我没法同时做那么多事情了........ -------------------------------------------- 但是我\(\color{#EEEEEE}{真真切切地 ...

  7. 生成df的几种方法

    法一: pd.DataFrame( [ (第一行),(第二行),(第三行)] ) df = pd.DataFrame([('bird', 389.0), ('bird', 24.0), ('mamma ...

  8. Vite-Admin后台管理系统|vite4+vue3+pinia前端后台框架实例

    基于vite4.x+vue3+pinia前端后台管理系统解决方案ViteAdmin. 前段时间分享了一篇vue3自研pc端UI组件库VEPlus.这次带来最新开发的基于vite4+vue3+pinia ...

  9. Linux普通用户使用docker以及docker-compose

    # 添加limstorm普通用户到docker用户组 sudo gpasswd -a limstorm docker # 切换docker用户组,该命令类似login指令,当它是以相同的帐号,另一个群 ...

  10. SpringBoot自动装配原理剖析(自己理解,有错请指出)

    注解 主类 @SpringBootApplication @EnableAutoConfiguration @Import({AutoConfigurationImportSelector.class ...