欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Python 进度条方法tqdm使用详解

Python 进度条方法tqdm使用详解

2025/4/18 2:11:38 来源:https://blog.csdn.net/weixin_41238626/article/details/147063664  浏览:    关键词:Python 进度条方法tqdm使用详解

✨前言:

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

✨安装

pip install tqdm

✨基本用法

🌟1. 在循环中使用

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

from tqdm import tqdm
import timefor 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 tqdmfor 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 tqdmdef task(n):time.sleep(0.1)return n * nwith ThreadPoolExecutor() as executor:results = list(tqdm(executor.map(task, range(100)), total=100))

✨常见场景示例

🌟1. 下载文件显示进度

结合 requests 库显示下载进度:

import requests
from tqdm import tqdmurl = "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 tqdmtqdm.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)和结合上下文管理器,可以轻松集成进度条功能

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词