【python 第三方库】tqdm

2024-01-25 00:00:00

目录:

tqdm 模块介绍

tqdm 以其简洁的API、丰富的功能和跨平台的兼容性,成为Python生态中最受欢迎的进度条库之一。

$ pip3 install tqdm

tqdm()

用户只需用 tqdm() 函数封装任意的可迭代对象(如列表、生成器、文件流等),即可自动获得一个动态更新的进度条,实时显示当前进度、已用时间、预计剩余时间以及处理速度(it/s)等关键信息。

from tqdm import tqdm
import time

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

运行上述代码,控制台将显示一个动态进度条。

trange()

对于简单的数值范围循环,tqdm 提供了 trange() 函数作为 tqdm(range(n)) 的语法糖,使代码更加简洁。

from tqdm import trange
import time

for i in trange(100):
    time.sleep(0.01)  # 执行任务

手动控制更新

当任务进度无法通过简单的迭代次数来衡量时(例如,处理流式数据、分块下载文件或执行不定次数的操作),可以使用手动更新模式。

首先创建一个总长度(total)已知或未知的进度条对象,然后在任务的关键节点调用 update() 方法。

from tqdm import tqdm
import time

with tqdm(total=200) as pbar:
    for i in range(20):
        time.sleep(0.1)  # 执行部分任务
        pbar.update(10)  # 每次更新10个单位进度

文件下载进度显示

在网络请求中显示下载进度是 tqdm 的一个经典应用场景。结合 requests 库的流式下载功能,可以实时反映大文件的下载进度。

import requests
from tqdm import tqdm

url = ' https://example.com/largefile.zip'
response = requests.get(url, stream=True)

# 尝试从响应头获取文件总大小
total_size = int(response.headers.get('content-length', 0))

with open('largefile.zip', 'wb') as file, tqdm(
    desc='Downloading',
    total=total_size,
    unit='B', # 以字节为单位
    unit_scale=True, # 会自动在KB、MB、GB之间缩放显示
    unit_divisor=1024,
) as bar:
    for data in response.iter_content(chunk_size=1024):
        file.write(data)
        bar.update(len(data))  # 更新已下载的数据量

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: