Python实现控制台进度条效果
此为封装好的类
使用时创建Progress类即可
请使用完成后及时删除
myProgress = Progress #创建实例
myProgress.set(num) #设置进度,范围为0-1,如果为1就会换行
del myProgress #删除实例
import sys
# <editor-fold desc="进度条简易实现">
class Progress:
"""
进度条类,按照IO的资源互斥,应该使类为单例,并且加锁,暂时简便设计\n
使用set设置进度,范围为0-1\n
在进度完成时,应当及时del对象\n
"""
title = ""
length = 0
quantity = 0
def __init__(self, title="Progress", len=20):
self.title = title
self.length = len
self.print()
def set(self, quantity):
quantity = 1 if quantity > 1 else quantity
self.quantity = quantity
self.print()
def print(self):
mBody = round(self.quantity * self.length)
mVoid = self.length - mBody
sys.stdout.write('\r' + self.title + ': [' + \
'#' * mBody + '\u0020' * mVoid + ']' + \
str(round(self.quantity * 100)) + '%')
sys.stdout.flush()
def __del__(self):
sys.stdout.write("\n")
sys.stdout.flush()
self.title = ""
self.length = 0
self.quantity = 0
# </editor-fold>
原理
主要使用 sys.stdout.write() 写入输出缓冲区
然后使用 sys.stdout.flush() 更新输出缓冲区
其中使用 \r 转义字符用于回车
回车本是指返回当前行行首
但是在打字机过渡到电脑时,回车的意义变为了下一行行首