tqdm使用

在 Python 中编写脚本时,尤其是在处理长时间运行的任务或循环时,了解代码执行的进度非常重要。tqdm 是一个轻量级、易用且功能强大的 Python 库,它可以帮助开发者在终端或 Jupyter Notebook 中快速生成进度条,从而直观地了解程序的执行进度。

本文将详细介绍 tqdm 库的使用方法,包括其安装、基本用法、与常见 Python 库的集成以及一些高级用法。

安装 tqdm

pip 是 Python 的包管理工具,您可以使用 pip 安装 tqdm

pip install tqdm 

安装完成后,可以在脚本中直接导入并使用 tqdm

tqdm 的基本用法

tqdm 的核心功能是为循环添加进度条。在最简单的用法中,只需要将循环对象传递给 tqdm 函数,就可以生成一个进度条。例如:
 

from tqdm import tqdm
import time

for i in tqdm(range(100)):
    time.sleep(0.1)  # 模拟耗时操作

上述代码将在终端中显示一个进度条,每次循环迭代时,进度条都会更新。

进度条的配置选项

tqdm 提供了多种配置选项,可以自定义进度条的显示方式:

  • desc:用于在进度条前显示一段描述文本。
  • total:设置进度条的总迭代次数(在无法自动推断时使用)。
  • ncols:设置进度条的宽度(列数)。
  • ascii:使用 ASCII 字符显示进度条,而不是 Unicode(适用于不支持 Unicode 的终端)。
  • bar_format:自定义进度条的格式。

举个例子:

for i in tqdm(range(100), desc="Processing", ncols=70, ascii=True):
    time.sleep(0.1)

这个代码段会在终端中显示一个带有描述文本的进度条,宽度限制为 70 列,并使用 ASCII 字符显示。

与其他 Python 库集成

tqdm 能够很好地与许多流行的 Python 库集成,比如 pandasmultiprocessingasyncio 等等。

pandas 集成

在处理大型数据集时,tqdm 可以与 pandas 配合使用,以显示 DataFrame 操作的进度。例如:

import pandas as pd
from tqdm import tqdm

tqdm.pandas()  # 启用 tqdm 的 pandas 支持

df = pd.DataFrame({
    'a': range(100),
    'b': range(100, 200)
})

df['a_squared'] = df['a'].progress_apply(lambda x: x ** 2)

上面的代码会在 DataFrame 的 apply 操作过程中显示进度条,这在处理大规模数据时尤为有用。

multiprocessing 集成

multiprocessing 模块允许 Python 程序并行执行任务。tqdm 可以与 multiprocessing 配合使用,显示多进程任务的进度。例如:

from multiprocessing import Pool
from tqdm import tqdm
import time

def square(x):
    time.sleep(0.1)
    return x ** 2

with Pool(5) as p:
    r = list(tqdm(p.imap(square, range(100)), total=100))

在这个例子中,tqdm 会显示所有进程的总体进度,而不仅仅是单个进程的进度。

asyncio 集成

在异步编程中,tqdm 也能发挥作用。例如:

import asyncio
from tqdm import tqdm

async def my_coroutine():
    for _ in tqdm(range(100)):
        await asyncio.sleep(0.1)

asyncio.run(my_coroutine())

尽管 tqdm 是为同步代码设计的,但它同样能适应异步环境,并且可以在异步代码中轻松实现进度条。

高级用法

除了基础用法和集成,tqdm 还提供了一些高级功能:

手动更新进度条

有时候,循环的迭代不是通过传统的 forwhile 控制的。在这种情况下,可以手动更新进度条。例如:

import asyncio
from tqdm import tqdm

async def my_coroutine():
    for _ in tqdm(range(100)):
        await asyncio.sleep(0.1)

asyncio.run(my_coroutine())

这个例子展示了如何使用 update 方法手动更新进度条。

嵌套进度条

tqdm 支持嵌套进度条,用于处理多层嵌套的任务。例如:

from tqdm import trange
import time

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

外层和内层循环的进度条会同时显示,帮助用户了解嵌套循环的执行情况。

结语

tqdm 是一个强大且灵活的进度条库,几乎可以在任何 Python 脚本中无缝集成。无论是简单的循环还是复杂的并行任务,tqdm 都能为您提供直观的进度反馈,提升代码的可读性和用户体验。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值