Python 进度条

我这里说明两种方式的进度条

0x00 使用 \r 做输出结尾

先看个例子

import time
import sys

for s in range(11):
    print("[progess][{}{}]|{:.2%}%".format(s*"#", (10-s)*"=", s/10), end="\r")
    time.sleep(0.5)

 上面例子关键点是输出字符串的结尾是回车符\r,就因为这个才能在原地更新进度

 知识补充:

     \n是换行,英文是New line
     \r是回车,英文是Carriage return
     机械打字机有回车和换行两个键作用分别是:
     1、换行就是把滚筒卷一格,不改变水平位置。
     2、回车就是把水平位置复位,不卷动滚筒。

因为回车符石复位,所以可以原地更新进度并显示

 

0x01 使用sys.stdout标准输出

直接上示例代码吧

import time
import sys

for s in range(11):
    sys.stdout.write("#")
    sys.stdout.flush()
    time.sleep(0.5)

 sys.stdout是标准输出,也可以做进度条的

这里需要注意的是:必须要flush,不然只会显示最后的结果,中间的进度更新看不到

为什么呢?

可以想象我们写文件吧,一般是先写到缓存中,缓存写满后再写到硬盘中,

为了安全,一般我们都会执行下flush强制将内容落到硬盘中;

上面进度条就是这样,刷新进度的时候要flush,不然看不到进度更新的。

 

最后进度条的展示设计这个要看个人了,简单也行,复杂也行。

posted @ 2018-09-14 20:59  Alummox  阅读(310)  评论(0编辑  收藏  举报