Python受欢迎的原因之一就是其计算生态丰富,据不完全统计,Python 目前为止有约13万+的第三方库。
本系列将会陆续整理分享一些有趣、有用的第三方库。
-
通过百度网盘获取:
链接:https://pan.baidu.com/s/1FSGLd7aI_UQlCQuovVHc_Q?pwd=mnsj
提取码:mnsj
-
前往GitHub获取:
https://github.com/returu/Python_Ecosystem
-
进度条显示:tqdm可以自动为循环、文件读写等操作生成进度条,显示当前进度、剩余时间、已完成的任务数等信息。 -
高度自定义:用户可以自定义进度条的样式、颜色、格式等。 -
支持多种场景:适用于循环、文件处理、数据加载等场景,也可以与 pandas等库结合使用。 -
多线程和多进程支持:在多线程或多进程环境中,tqdm可以正确显示每个线程或进程的进度。
pip install tqdm
https://github.com/tqdm/tqdm
-
2.1 基于可迭代对象:
from tqdm import tqdm
import time
# 创建一个范围对象
numbers = range(10)
# 使用 tqdm 包装范围对象
for i in tqdm(numbers):
# 模拟耗时操作
time.sleep(0.1)
# 使用 tqdm 包装列表对象
for char in tqdm(["a", "b", "c", "d"]):
# 模拟耗时操作
time.sleep(0.1)
from tqdm import trange
for i in trange(100):
sleep(0.1)
data = ['a', 'b', 'c', 'd', 'e']
for index, item in tqdm(enumerate(data), total=len(data)):
print(f'Index: {index}, Item: {item}')
# 模拟耗时操作
time.sleep(1)
-
2.2 手动控制:
# total 参数用于指定迭代的总次数或任务的总量
with tqdm(total=200) as pbar:
for i in range(10):
time.sleep(0.1)
pbar.update(10)
# 创建一个 tqdm 实例,total 参数设置为 200,表示总共有 200 步
pbar = tqdm(total=200)
for i in range(10):
time.sleep(0.1)
# 更新进度条,每次更新 10 步
pbar.update(10)
# 关闭进度条
pbar.close()
-
2.3 自定义描述和额外统计信息:
-
iterable:可迭代对象,用于装饰进度条。如果为空,则需要手动管理更新。 -
desc:进度条前缀。 -
total:预期迭代次数。如果未指定,将尝试使用 len(iterable)。如果为 float(“inf”) 或无法获取长度,则仅显示基本进度统计信息(无 ETA 和进度条)。 -
leave:是否在迭代结束后保留进度条。 -
file:指定进度条输出的目标文件。默认为 sys.stderr。 -
ncols:整个输出消息的宽度。如果未指定,将尝试使用环境宽度。如果为 0,则不显示进度条(仅显示统计信息)。 -
mininterval:进度条显示更新的最小间隔时间(秒)。 -
maxinterval:进度条显示更新的最大间隔时间(秒)。如果启用监控线程或动态调整 miniters,则会自动调整 miniters 以适应 mininterval。 -
miniters:进度条显示更新的最小间隔迭代次数。如果为 0 且启用 dynamic_miniters,则会自动调整为与 mininterval 对应的迭代次数。 -
ascii:是否使用 ASCII 字符显示进度条。如果未指定或为 False,则使用 Unicode 字符。 -
disable:是否禁用进度条。如果为 None,则在非 TTY 环境中禁用。 -
unit:每次迭代的单位。 -
unit_scale:是否自动缩放迭代次数并添加国际单位制前缀(如千、兆等)。 -
dynamic_ncols:是否动态调整 ncols 和 nrows 以适应窗口大小变化。 -
smoothing:用于速度估计的指数移动平均平滑因子。 -
bar_format:自定义进度条格式字符串。 -
initial:初始计数器值。适用于重新启动进度条。 -
position:指定进度条显示的行偏移量(从 0 开始)。如果未指定,则自动确定。 -
postfix:指定额外的统计信息,显示在进度条末尾。 -
unit_divisor:单位缩放的分母(默认为 1000)。 -
write_bytes:是否以字节形式写入。如果为 False,则写入 Unicode。 -
lock_args:传递给 refresh 的参数,用于中间输出。 -
nrows:屏幕高度。如果未指定,则尝试使用环境高度。 -
colour:进度条颜色。 -
delay:在显示进度条之前延迟的时间(秒)。
# 创建一个 tqdm 对象,使用多个常用参数
for i in tqdm(
range(100),
desc="Processing", # 设置描述
unit="item", # 设置单位
unit_scale=True, # 自动缩放单位
dynamic_ncols=True, # 动态调整宽度
postfix={"loss": 0.5, "accuracy": 0.9}, # 设置额外统计信息
colour="green", # 设置颜色
):
time.sleep(0.01) # 模拟耗时操作
-
2.4 动态更新描述信息:
pbar.set_description(desc=None, refresh=True)
参数说明:
-
desc
:要设置的描述信息,类型为字符串。如果为
None
,则清除描述信息。 -
refresh
:是否立即刷新进度条,默认为
True
。
pbar.set_postfix(ordered_dict=None, refresh=True, **kwargs)
参数说明:
-
ordered_dict
:
一个有序字典,用于指定要显示的键值对信息。
-
refresh
:是否立即刷新进度条,默认为
True
。 -
**kwargs
:可变关键字参数,用于指定要显示的键值对信息。
set_description
方法更新进度条的描述信息,显示当前正在处理的项目编号。在每次循环中计算一个结果,然后使用set_postfix
方法将结果以键值对的形式显示在进度条右侧。# 创建一个进度条实例
pbar = tqdm(range(10))
for i in pbar:
# 动态更新描述信息
pbar.set_description(f"Processing item {i}")
# 模拟一个计算结果
result = i * 2
# 动态更新进度条右侧的信息
pbar.set_postfix({"Result": result})
time.sleep(0.5)
# 关闭进度条
pbar.close()
-
2.5 嵌套进度条:
for i in tqdm(range(3), desc='外层循环'):
for j in tqdm(range(3), desc='内层循环', leave=False, ncols=40):
time.sleep(0.1)
-
2.6 与 Pandas 集成:
在Pandas中使用tqdm的基本方法是通过tqdm.pandas()函数将tqdm与 Pandas集成,然后使用progress_apply或progress_map方法来显示进度条。
import pandas as pd
from tqdm import tqdm
import time
# 创建一个示例 DataFrame
df = pd.DataFrame({'a': range(10)})
# 使用 tqdm 进度条
# 可以通过 tqdm 的参数来自定义进度条的外观和行为
tqdm.pandas(desc='正在处理数据记录', colour="green")
def apply_fun(x):
time.sleep(2) # 模拟耗时操作
return x ** 2
# 使用 progress_map 显示进度条
df['a_squared'] = df['a'].progress_apply(apply_fun)
-
2.7 与 IPython/Jupyter Notebook 集成:
tqdm可以与IPython和Jupyter Notebook很好地集成,以在这些环境中提供美观且交互性强的进度条。
首先要确保已经安装了Jupyter Notebook中用于显示交互式小部件的库ipywidgets,tqdm在Jupyter Notebook中显示进度条依赖于它。可以使用以下命令进行安装:
pip install ipywidgets
# Anaconda 环境
conda install -c conda-forge tqdm ipywidgets
在Jupyter Notebook中,需要使用tqdm.notebook模块中的trange和tqdm函数,它们会以更美观的方式显示进度条。
from tqdm.notebook import trange, tqdm
for i in trange(3, desc='1st loop'):
for j in tqdm(range(100), desc='2nd loop'):
time.sleep(0.01)
更多内容可以前往官方文档查看:
https://tqdm.github.io/


本篇文章来源于微信公众号: 码农设计师