利用sys打印进度条

在很多常见中,需要对当前处理的进度进行显示,这个时候就需要进度条了,在python中,也有封装好的进度条模块,当然,也可以自己编写一个简单的进度条来帮助理解进度条的实现。

首先,需要理解一个概念,就是python什么时候将数据打印输出到屏幕或者文件中,这个和存储中的buffer有点像,因为内存的速度比较快,而硬盘的速度相对较慢,不可能说整个应用的速度,都是和硬盘的速度相当,这样会影响整个应用的效率,所以,应用会先将数据写入到内存cache中,在内存中有两个阈值,也就是高地水位值:

  • 在低水位以下时,系统会定期将cache中的数据,刷到硬盘中,这个时候数据才会存储在硬盘中,低速刷盘
  • 当高于低水位,而低于高水位时,系统会以中速,将cache中的数据,刷到硬盘中
  • 当cache中的数据,高于高水位时,系统会高速刷盘,直至刷到低水位以下。

在python中,系统刷盘,是通过flush来实现的,对于文件或者系统都是通过该方法来实现。写文件时,也不是有一条数据就往硬盘中写一条,都是有一个buffer_size,当要写入的数据量,达到buffer_size时,才会将数据写入到文件中,也就是硬盘中。

下面来说一下进度条的想法,定义一个100个空格宽的格子,进度条达到时,以=显示,在格子的尾部,显示当前的比例。

import sys,time
def process_view(now,total):
precent = int(now/total*100)
# print(precent)
sys.stdout.write("\r[%s%s%d%%]"%("="*precent," "*(100-precent),precent))
sys.stdout.flush()
time.sleep(0.1)

if __name__ == '__main__':
for i in range(101):
process_view(i,100)
i+=1

实现的效果如下:

[================== 18%]

其中,\r表示清除当前的屏幕输出,在打印本行输出时,先将之前的输出清除;

%s表示字符串占位符,指代后面的字符串

%d表示整型int占位符,指代后面的整型

%%表示百分比占位符,将前面的数字,以百分数的形式显示。

posted @ 2018-08-01 21:22  波波波波波  阅读(481)  评论(0编辑  收藏  举报