Python单行刷新输出与tqdm进度条实现详解
本文详细解析Python中print函数的刷新机制,通过\r和end参数实现单行结果动态更新,解决位数变化导致的显示错乱问题。同时介绍tqdm库的安装与基础用法,展示如何在列表遍历和字符串处理中添加可视化进度条,适用于机器学习训练过程中的Loss和Accuracy实时监控场景。
Python单行刷新输出与tqdm进度条实现详解
Python输出结果刷新及进度条的实现操作
print函数参数详解
在Python编程中,主要的输出方式依赖于print函数。了解该函数的参数配置对于控制输出格式至关重要。
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
*objects参数用于指定需要打印的值,可以接受多个无名参数或具体的数据对象。
sep参数定义了多个打印值之间的分隔符,默认情况下为一个空格。
end参数指定打印内容结束时的符号,默认为换行符\n,用户可根据需求自定义设置。
file参数用于指定输出目标,默认输出至标准终端sys.stdout,也可设置为文件对象以保存输出结果。
flush参数控制是否立即刷新打印缓冲区,默认值为False。
实现单行输出结果的动态刷新
实现单行输出结果的动态刷新
若需在一行内持续显示更新后的结果,可利用'\r'(回车符)使光标回到行首,并将end参数设为空字符串'',从而每次更新时覆盖原有内容。
import time
for i in range(15):
time.sleep(0.5) # 这里为了查看输出变化,实际使用不需要sleep
print('\r', i, end='')
# print('\r', 15-i, end='') # 从两位变一位会有问题
上述方法在数值位数发生变化(如从两位数变为一位数)时可能导致显示异常,可通过format格式化输出解决此问题。
import time
for i in range(15):
time.sleep(0.5)
print('\r', "{:d}".format(15-i), end='')
模型训练过程中Loss和Accuracy的刷新输出
模型训练过程中Loss和Accuracy的刷新输出
在机器学习或深度学习模型训练时,通常需要定期输出损失函数值和准确率。若直接使用print输出,终端会生成大量冗余信息。采用单行刷新输出的方式,可以设置epochs和batch数量,在每次batch处理时刷新显示,并在一个epoch结束后同时输出训练集和测试集的结果。
import time
# 设置epochs和batch的数量
epochs = 5
n_batch = 15
# 这里是测试自己设置的loss和acc
train_loss = 1.2345
train_acc = 0.345678
test_loss = 1.1234
test_acc = 0.235467
for i in range(epochs):
for j in range(n_batch):
time.sleep(0.5)
train_loss -= 0.001
train_acc += 0.0001
print("\rEpoch: {:d} batch: {:d} loss: {:.4f} acc: {:.4f} | {:.2%}"
.format(i+1, j+1, train_loss, train_acc, (j+1)*1.0/n_batch), end='')
test_loss -= 0.001
test_acc += 0.0001
print("\rEpoch: {:d}/{:d} train_loss: {:.4f} test_loss: {:.4f} train_acc: {:.4f} test_acc: {:.4f}"
.format(i+1, 5, train_loss, test_loss, train_acc, test_acc), end='\n')
注意,在print语句中"Epoch"前必须包含"\r"以确保光标回到行首。内部循环使用end='',外部循环使用end='\n',最终打印结果如下所示。

使用tqdm库显示进度条
使用tqdm库显示进度条
首先需安装tqdm库,命令为:pip install tqdm。
基本用法中,若传入一个列表给tqdm,可直接显示进度;若直接给定整数,可使用trange函数简化操作。
import time
from tqdm import tqdm, trange
for i in tqdm(range(100)):
time.sleep(0.05)
# do something
# for i in trange(100):
# time.sleep(0.05)
# # do something
运行结果将显示百分比进度以及当前已处理的项目数量。

tqdm接受的输入列表可以是字符串类型,同时也支持为进度条添加描述性文字。
import time
from tqdm import tqdm
pbar = tqdm(["a", "b", "c", "d", "e"])
for char in pbar:
time.sleep(0.8)
pbar.set_description("Processing %s" % char)
# pbar.set_description("Processing {0}".format(char))

以上关于Python输出结果刷新及进度条的实现操作即为全部内容,希望能为读者提供参考,并欢迎继续支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













