Python 进度条方法tqdm使用详解

✨前言:

tqdm 是 Python 中一个快速、可扩展的进度条工具,广泛用于循环和迭代任务中,帮助用户直观地跟踪代码执行进度。以下是 tqdm 的详细使用指南。

✨安装

pip install tqdm

✨基本用法

🌟1. 在循环中使用

对任意可迭代对象(如列表、生成器)包装 tqdm,自动显示进度条:

from tqdm import tqdm
import time

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

🌟2. 手动更新进度

通过 with 语句手动控制进度条:

with tqdm(total=100) as pbar:
    for i in range(10):
        time.sleep(0.1)
        pbar.update(10)  # 手动更新进度(每次+10)

✨高级功能

🌟1. 设置描述信息

为进度条添加前缀描述:

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

在这里插入图片描述

🌟2. 自定义进度条样式

通过参数调整进度条外观:

tqdm(range(100), 
     bar_format="{l_bar}{bar:20}{r_bar}",  # 控制条宽
     ncols=80,             # 进度条总宽度
     unit="step",          # 单位名称
     colour="green")       # 颜色(需终端支持)

🌟3. 嵌套进度条

处理多层循环时使用嵌套进度条:

from tqdm import tqdm

for i in tqdm(range(5), desc="Outer"):
    for j in tqdm(range(100), desc="Inner", leave=False):  # leave=False 内层完成后消失
        time.sleep(0.01)

🌟运行示例:

在这里插入图片描述

🌟4. 处理文件读取进度

显示文件读取或下载进度:

with open("large_file.txt", "rb") as f:
    for chunk in tqdm(iterable=lambda: f.read(1024), total=1024*1024, unit="KB"):
        # 处理文件块
        pass

🌟5. 结合多进程/多线程

在并行任务中使用 tqdm(需注意线程安全):

from concurrent.futures import ThreadPoolExecutor
from tqdm import tqdm

def task(n):
    time.sleep(0.1)
    return n * n

with ThreadPoolExecutor() as executor:
    results = list(tqdm(executor.map(task, range(100)), total=100))

✨常见场景示例

🌟1. 下载文件显示进度

结合 requests 库显示下载进度:

import requests
from tqdm import tqdm

url = "https://example.com/large_file.zip"
response = requests.get(url, stream=True)
total_size = int(response.headers.get("content-length", 0))

with open("file.zip", "wb") as f, tqdm(
    desc="Downloading",
    total=total_size,
    unit="B",
    unit_scale=True,
    unit_divisor=1024,
) as bar:
    for chunk in response.iter_content(chunk_size=1024):
        f.write(chunk)
        bar.update(len(chunk))

🌟2. Pandas 处理数据

在 pandas 的 apply 中显示进度:

import pandas as pd
from tqdm import tqdm

tqdm.pandas()  # 激活 pandas 支持

df = pd.DataFrame({"data": range(1000)})
df["data_squared"] = df["data"].progress_apply(lambda x: x ** 2)

✨注意事项

🌟Jupyter Notebook 支持

在 Jupyter 中使用 tqdm.notebook 子模块以获得更友好的交互式进度条:

from tqdm.notebook import tqdm
for i in tqdm(range(100)):
    time.sleep(0.1)

🌟避免输出干扰

若循环内有 print 语句,进度条可能换行混乱。通过 tqdm.write 输出日志:

for i in tqdm(range(100)):
    tqdm.write(f"Processing item {i}")  # 避免破坏进度条

🌟异常处理

使用 try…finally 确保进度条关闭:

pbar = tqdm(total=100)
try:
    for i in range(10):
        time.sleep(0.1)
        pbar.update(10)
finally:
    pbar.close()

✨总结

tqdm 是提升代码交互体验的利器,支持丰富的自定义选项,适用于循环、文件操作、并行任务等场景。通过调整参数(如 desc、total、unit)和结合上下文管理器,可以轻松集成进度条功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天Aileft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值