tqdm,一个优雅的进度条库!

文摘   2024-11-06 10:00   广东  

大家好,我是“橙子”。今天我们来聊聊一个非常实用的 Python 库 —— tqdm。如果你曾经编写过需要较长时间运行的 Python 脚本,你一定会发现,能够看到进度条会让人心里有数,工作更高效。tqdm 就是为了解决这个问题而诞生的,它可以非常优雅地为你提供一个进度条,让你实时看到任务执行的进度,既美观又实用。

今天我们将一起学习如何使用 tqdm 来提升你的开发体验。无论你是在处理数据,还是执行长时间的计算任务,tqdm 都能帮助你轻松查看进度。

一、安装 tqdm

首先,我们需要安装 tqdm 库。在终端或命令行中执行以下命令:

pip install tqdm

安装完成后,我们就可以开始使用 tqdm 来为我们的 Python 代码添加进度条了!

二、基本用法:在循环中添加进度条

tqdm 的使用非常简单,最基本的功能就是给一个循环加上进度条。让我们来看一个简单的例子。

给 for 循环加进度条

from tqdm import tqdm
import time

# 模拟一个需要长时间执行的任务
for i in tqdm(range(10)):
    time.sleep(0.5)  # 模拟任务

代码解释

  • from tqdm import tqdm:首先我们导入 tqdm。
  • tqdm(range(10)):我们将 range(10) 传递给 tqdm,这会生成一个带有进度条的循环。
  • time.sleep(0.5):为了模拟一个需要耗时的任务,我们让每次迭代暂停 0.5 秒。

运行代码后,你会看到一个进度条,实时显示当前的进度。

小贴士

  • tqdm 会自动根据任务的迭代次数来计算进度,不需要手动设置。
  • 进度条的长度和显示内容可以自动调整,默认情况下,tqdm 会显示已完成的百分比、已用时间、估计剩余时间等信息。

三、进度条的更多定制:参数设置

tqdm 不仅仅是一个简单的进度条,它还提供了丰富的参数,帮助我们定制进度条的外观和行为。让我们来看看常用的几个参数。

自定义进度条的描述和总数

from tqdm import tqdm
import time

# 设置描述文字和进度条总数
for i in tqdm(range(100), desc="数据处理", total=100, ncols=100):
    time.sleep(0.1)

代码解释

  • desc:设置进度条前面显示的描述文字,这里是 “数据处理”。
  • total:指定总的迭代次数,tqdm 会根据这个值来计算进度。
  • ncols:设置进度条的长度(字符数)。如果不设置,tqdm 会自动调整。

运行这段代码,你会看到一个宽度为 100 个字符的进度条,且前面会显示描述文字“数据处理”。

小贴士

  • ncols 设置的是进度条的最大宽度,如果终端窗口太小,tqdm 会自动调整进度条的长度。
  • desc 可以帮助你在显示多个进度条时区分不同的任务,尤其是在并行执行时特别有用。

四、在长时间任务中显示进度:使用 tqdm 包裹文件操作

除了循环,tqdm 还可以用于长时间运行的文件操作或其他任务。假设你要读取一个非常大的文件,使用 tqdm 包裹 open() 可以实时显示文件读取的进度。

用 tqdm 包裹文件读取进度

from tqdm import tqdm

# 假设读取一个大文件
with open('large_file.txt''r'as f:
    for line in tqdm(f, desc="读取文件"):
        # 这里模拟每行数据的处理
        pass

代码解释

  • tqdm(f, desc="读取文件"):我们将打开的文件对象 f 传递给 tqdm,tqdm 会自动跟踪文件读取的进度并显示进度条。
  • 在这个例子中,tqdm 会根据文件的总行数来计算进度。

小贴士

  • 如果你需要显示其他类型的进度(如写入文件的进度),你也可以使用 tqdm 来包裹相关操作。
  • 记得在大文件读取时,最好一次读取一行,以免内存占用过高。

五、使用 tqdm 进行多任务进度条显示

有时候,你可能需要显示多个任务的进度。比如你同时在处理多个数据集或执行多个任务。tqdm 支持多个进度条并行显示。

多任务进度条

from tqdm import tqdm
import time

# 任务1
task1 = tqdm(range(5), desc="任务1")
for i in task1:
    time.sleep(1)

# 任务2
task2 = tqdm(range(7), desc="任务2")
for i in task2:
    time.sleep(0.5)

代码解释

  • 我们创建了两个进度条 task1task2,分别表示两个独立的任务。
  • tqdm(range(5))tqdm(range(7)) 用来控制每个任务的进度。

小贴士

  • 当显示多个进度条时,tqdm 会自动将它们排列在不同的行,帮助你同时监控多个任务的进度。

六、tqdm 与 pandas 配合使用

tqdm 不仅支持普通的循环,也可以和 pandas 一起使用。如果你正在处理大量数据并且使用 pandas,可以通过 tqdm.pandas() 来轻松地为你的 DataFrame 操作添加进度条。

tqdm 与 pandas 配合使用

import pandas as pd
from tqdm import tqdm

# 启用 tqdm 进度条
tqdm.pandas()

# 创建一个 DataFrame
df = pd.DataFrame({'A': range(1000)})

# 使用进度条处理 DataFrame
df['B'] = df['A'].progress_apply(lambda x: x * 2)

代码解释

  • tqdm.pandas() 启用 pandas 的进度条功能。
  • progress_apply() 用于对 DataFrame 的列应用函数时,显示进度条。

小贴士

  • progress_apply()apply() 方法的增强版,它会自动显示进度条,帮助你实时了解数据处理的状态。

七、实际应用场景

tqdm 的应用场景非常广泛,以下是几个常见的应用:

  • 数据处理:当你在进行数据清洗或转换时,可以通过进度条来监控任务的完成情况。
  • 爬虫程序:当你使用 Python 编写爬虫抓取数据时,进度条可以帮助你知道抓取的进度,避免任务卡住。
  • 机器学习训练:在训练模型时,进度条可以帮助你实时监控训练进度,尤其是在训练时间较长的情况下。

结尾

今天我们一起学习了 tqdm 库,它是一个非常强大且易于使用的进度条工具,可以帮助我们实时监控 Python 程序的执行进度。无论是在循环、文件读取,还是在 pandas 操作中,tqdm 都能带来很好的用户体验。

记得动手敲代码,使用 tqdm 为你的项目加上进度条,让你的 Python 编程更加高效和愉快!祝大家学习愉快,Python 学习节节高!


梦起时分
关注我了解更多信息
 最新文章