头图

大家好,我是涛哥,本文内容来自 涛哥聊Python ,转载请标原创。

今天为大家分享一个超酷的 Python 库 - tqdm

Github地址:https://github.com/tqdm/tqdm


tqdm是一个快速、扩展性强的Python进度条库,它可以在长时间运行的循环中添加一个进度提示信息,帮助用户监控程序的执行进度。

安装

tqdm可以通过pip进行安装,非常简单:

pip install tqdm

特性

  • 易用性:通过简单的封装可以轻松添加进度条。
  • 灵活性:支持多种输出格式和配置,满足不同需求。
  • 高效性:对程序性能影响极小。
  • 兼容性:可以与循环、迭代器等Python标准结构无缝集成。

基本功能

tqdm库的基本功能是为长时间运行的循环或迭代器提供一个快速和可扩展的进度条。

在循环中使用tqdm

tqdm最常见的用法是直接包裹一个可迭代对象,如列表或迭代器,来自动显示进度条。

for循环中使用tqdm来显示进度:

from tqdm import tqdm
import time

# 使用tqdm包裹range函数来显示进度条
for i in tqdm(range(100)):
    time.sleep(0.1)  # 模拟任务

这段代码创建了一个进度条,随着循环的执行逐渐填满。

在文件读取中使用tqdm

在处理大文件或进行大量数据读取时,tqdm可以用来显示当前读取的进度。

使用tqdm来追踪文件的读取进度:

from tqdm import tqdm

# 假设我们有一个大文件需要逐行读取
with tqdm(total=100) as pbar:
    with open('large_file.txt', 'r') as file:
        for line in file:
            # 对每行进行处理的代码
            pbar.update(1)

这个例子中,total=100预设了文件的总行数(或预估的处理次数),并通过pbar.update(1)来逐行更新进度条。

嵌套进度条

tqdm支持嵌套进度条,这在处理具有多层循环的任务时特别有用。

创建嵌套的进度条来监控多层循环的进度:

from tqdm import tqdm
import time

for i in tqdm(range(10), desc='Outer loop'):
    for j in tqdm(range(5), desc='Inner loop', leave=False):
        time.sleep(0.1)

在这个示例中,外层循环有一个主进度条,内层循环有一个次级进度条。leave=False参数表示内层循环完成后进度条消失。

高级功能

tqdm不仅提供了基本的进度条功能,还包含了一些高级功能,使得进度条的使用更加灵活和强大。

手动控制进度更新

除了自动更新进度,tqdm还允许手动控制进度条的更新,这在进度不容易预测或非线性增长的场景中特别有用。

手动更新进度条的值:

from tqdm import tqdm
import time

total = 100
with tqdm(total=total) as pbar:
    for i in range(10):
        # 执行某些操作
        time.sleep(0.2)
        # 手动更新进度条,增加10
        pbar.update(10)

这段代码中,使用with语句创建了一个进度条,并在每次循环后手动增加进度。

进度条描述和自定义

tqdm允许设置进度条的描述,并支持多种自定义选项,如进度条的填充字符、布局等。

自定义进度条的外观和描述:

from tqdm import trange
import time

# 使用trange函数,它是tqdm(range())的简写
for i in trange(100, desc='Loading', ascii=True, fillchar='*'):
    time.sleep(0.01)

在这个示例中,进度条有一个描述"Loading",使用ASCII字符来显示进度,并且填充字符为"*"。

进度条嵌套和层级管理

tqdm支持进度条的嵌套使用,能够清晰地显示多层任务的进度状态。

展示多层嵌套进度条:

from tqdm import tqdm
import time

# 外层进度条
for i in tqdm(range(5), desc='Outer loop'):
    # 内层进度条
    for j in tqdm(range(10), desc='Inner loop', leave=False):
        time.sleep(0.1)

这段代码演示了如何创建嵌套的进度条,其中leave=False参数让内层进度条在完成时自动消失,保持界面整洁。

进度条与Pandas集成

tqdm还提供了与Pandas集成的功能,可以直观地显示数据处理的进度。

在Pandas操作中使用tqdm显示进度:

import pandas as pd
from tqdm import tqdm
from tqdm.notebook import tqdm_notebook
tqdm.pandas()

# 创建一个大的DataFrame
df = pd.DataFrame(range(1000))

# 使用progress_apply代替apply,显示进度信息
result = df.progress_apply(lambda x: x**2)

在这个例子中,tqdm.pandas()方法修改了Pandas的apply函数,使其显示进度信息。

实际应用场景

tqdm库因其灵活性和实用性,在多种实际应用场景中都能发挥重要作用。

大数据处理

在处理大规模数据集时,tqdm能够有效地显示处理进度,帮助监控任务的执行状态。

在数据处理循环中使用tqdm跟踪进度:

from tqdm import tqdm
import time

# 假设有一个大数据集需要处理
data = range(100000)

# 使用tqdm显示处理进度
for item in tqdm(data, desc='Processing data'):
    # 这里替换为实际的数据处理逻辑
    time.sleep(0.0001)

这段代码为数据处理任务提供了清晰的进度反馈。

机器学习模型训练

在机器学习模型训练过程中,tqdm可以用来显示训练进度,尤其是在训练大型神经网络时非常有用。

在模型训练循环中使用tqdm跟踪进度:

from tqdm import tqdm
import time

# 假设有一个训练周期需要多次迭代
epochs = 10

for epoch in tqdm(range(epochs), desc='Training model'):
    # 这里替换为模型训练的代码
    time.sleep(1)

这个例子中,tqdm跟踪模型训练的进度,每个训练周期都有明确的进度显示。

文件上传和下载

在进行文件上传或下载等耗时的I/O操作时,tqdm可以提供直观的进度信息。

模拟文件下载过程中使用tqdm显示进度:

from tqdm import tqdm
import time

# 假设文件大小为1000单位
file_size = 1000

with tqdm(total=file_size, desc='Downloading file') as pbar:
    for _ in range(100):
        # 模拟下载过程
        time.sleep(0.05)
        pbar.update(10)  # 假设每次下载10单位大小

这段代码在模拟文件下载过程中显示了下载进度。

总结

tqdm库是Python中一款极受欢迎的进度条工具,以其简洁性和高效性著称。它可以轻松集成到各种循环和迭代器中,提供实时的进度更新,帮助用户直观地了解任务执行状态。无论是数据处理、文件传输还是机器学习模型训练,tqdm都能够提供清晰、直观的进度反馈。此外,tqdm支持多种自定义设置,包括进度条样式、格式及嵌套显示等,满足不同场景的需求。它的轻量级设计确保了在不影响程序性能的前提下增强用户体验。总之,tqdm是任何需要进度反馈的Python项目中不可或缺的工具。


涛哥聊Python
59 声望37 粉丝