2

python笔记:打印进度

 2 years ago
source link: https://gsy00517.github.io/python20200108214052/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

python笔记:打印进度

发表于 2020-01-08 | 更新于: 2020-02-07 | 分类于 程序与设计 | | 阅读次数:
字数统计: 788字 | 阅读时长 ≈ 2分钟

在我们训练模型的时候,我们总希望能够直接看到训练的进度,下面我就总结几个我收集的打印进度的方法。

References

电子文献:
https://blog.csdn.net/u013985241/article/details/86653356
https://blog.csdn.net/zkp_987/article/details/81748098


利用回车符

打印百分比应该是最常见的方法,也是我一直使用的。不过如果简单地逐次打印百分比的话,就会占据大量的屏幕空间,甚至装不下而需要手动拖动滚动条,让人眼花缭乱。这时我就想到了利用转义符“\r”,在print完本次的进度之后,下一次直接回车将其清除覆盖,这样就达到了既不占用屏幕又清晰的目的。
大致的方法如下:

import time #这里是为了用来延时,代替训练的时间
numOfTimes = 200 #总循环次数,可以是总训练数据量等,这里设为200
for i in range(numOfTimes):
print("\r", "progress percentage:{0}%".format((round(i + 1) * 100 / numOfTimes)), end = "", flush = True)
time.sleep(0.02) #若前面from time import sleep,这里直接sleep(0.02)即可

这里用到了python的format格式化函数,format中计算出的数值对应的位置是{0},将在实际print的过程中被替换。
此外,这里还用到了round()函数,其作用是返回浮点数的四舍五入值。
关于上面在print()函数中出现的flush,文首的参考链接中已给出解释,这里做个搬运:
因为print()函数会把内容放到内存中,内存中的内容并不一定能够及时刷新显示到屏幕中。而当我们使用flush = True之后,会在print结束之后,立即将内存中的东西显示到屏幕上,清空缓存。
基于上述原理,flush大致有下面两个使用场景:

  1. 在循环中,要想每进行一次循环体,在屏幕上更新打印的内容就得使用flush = True的参数设置。(我这里就是这种情况)
  2. 打开一个文件,向其写入字符串,在关闭文件f.close()之前 打开文件是看不到写入的字符的。因此,如果要想在关闭之前实时地看到写入的字符串,那么就应该使用flush = True

利用tqdm库

有需求就有市场,一搜果然还是有库能满足我的需求的。tqdm就是其中之一,它是一个快速,可扩展的python进度条,可以在python长循环中添加一个进度提示信息。
大致用法如下:

import tqdm
import time
numOfTimes = 200 #总循环次数,可以是总训练数据量等,这里设为200
for i in tqdm.tqdm(range(numOfTimes)):
time.sleep(0.02) #代替训练等耗时过程
pass

也可以直接from tqdm import tqdm,这样后面就不需要tqdm.tqdm了。


利用progressbar

库如其名,这个库就是用来做进度条的。如果没有的话,它和tqdm都可以使用pip来安装。

import progressbar
from time import sleep
numOfTimes = 200 #总循环次数,可以是总训练数据量等,这里设为200
progress = progressbar.ProgressBar()
for i in progress(range(numOfTimes)):
sleep(0.02)

碰到底线咯 后面没有啦

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK