我这里说明两种方式的进度条
0x00 使用 \r 做输出结尾
先看个例子
import timeimport sysfor 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 timeimport sysfor s in range(11): sys.stdout.write("#") sys.stdout.flush() time.sleep(0.5)
sys.stdout是标准输出,也可以做进度条的
这里需要注意的是:必须要flush,不然只会显示最后的结果,中间的进度更新看不到
为什么呢?
可以想象我们写文件吧,一般是先写到缓存中,缓存写满后再写到硬盘中,
为了安全,一般我们都会执行下flush强制将内容落到硬盘中;
上面进度条就是这样,刷新进度的时候要flush,不然看不到进度更新的。
最后进度条的展示设计这个要看个人了,简单也行,复杂也行。