✨前言:
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)和结合上下文管理器,可以轻松集成进度条功能