tqdm是一款新的进度条, tqdm 库比较热门,据说比老版的 python-progressbar 库的单次响应时间提高了 10 倍以上。
progressbar 的原理
其实进度条的原理十分的简单,无非就是在 shell 中不断重写当前输出。
Bash 实现
#/usr/bin/bash
for i in {1..100};
do
echo -ne "$i% \r"
sleep 0.01
done
echo -ne "\n"
echo -n 存在明显的兼容性问题。使用 printf
#/usr/bin/bash
for i in {1..100};
do
printf "%s%% \r" $i
sleep 0.01
done
printf "\n"
Python 实现
Python 主要使用系统库里的标准输出,sys.stdout 提供了便利的方法用于向 shell 打印输出。具体的方法介绍这里不赘述。
import sys
import time
for i in range(100):
sys.stdout.write('\r')
sys.stdout.flush()
sys.stdout.write('{}%\r'.format(i))
sys.stdout.flush()
time.sleep(0.01)
>>> from time import sleep
>>> from tqdm import tqdm
>>> for i in tqdm(range(1000)):
... sleep(0.01)
from tqdm import tqdm
pbar = tqdm(range(300))#进度条
for i in pbar:
err = 'abc'
pbar.set_description("Reconstruction loss: %s" %(err))