在算法执行过程中,使用PyPrind创建一个进度条对象,可视化算法的执行进度
官方地址:https://github.com/rasbt/pyprind
可以支持多种不同样式的进度条显示。
import pyprind
import time
pbar = pyprind.ProgBar(50) # 表示总共更新50次,所以每次就占2%
for i in range(50):
time.sleep(0.1)
pbar.update()
输出:
0% [##############################] 100% | ETA: 00:00:00
Total time elapsed: 00:00:05
为了更好的实现个性化,可以手工编写关于描述进度的代码。
显示进度的百分比情况:
import time
for i in range(101):
time.sleep(0.1)
# 转义字符\r表示将行首,end=''表示输出不换行
print('\r{:2}%'.format(i), end='')
输出:(动态上升的百分比)
34%
带刷新的文本进度条
import time
task = 100
scale = 10
start_time = time.time()
for i in range(1, 100):
time.sleep(0.1)
left = '*' * int((i / scale))
right = '.' * int((task - i) / scale)
ratio = (i/task) * 100
print('\r{:^3.0f}%[{}->{}]{:.2f}s'
.format(ratio, left, right, time.time()-start_time), end='')
输出:
23 %[**->.......]2.32s
format可以控制格式生成对应的字符串,使用{}来指定需要传入的内容:
>>> '{}: {} is {}'.format('language', 'python', 2)
'language: python is 2'
可以在{}中加入序号表示传入的顺序:
>>> '{2}: {0} is {1}'.format('language', 'python', 2)
'2: language is python'
需要传入{},则使用{{}}
>>> '{{2}}: {0} is {1}'.format('language', 'python', 2)
'{2}: language is python'
format槽{}格式:
{<参数序号>:<格式控制标记>}
: | <填充> | <对齐> | <宽度> | <,> | <.精度> | <类型> |
---|---|---|---|---|---|---|
引导符号,起到分割作用,不会显示在输出 | 用于填充单个字符 | <左对齐; >右对齐;^居中对齐 | 槽的输出宽度 | 数字的千位分割符 ,比如1,123,456 | 浮点数的精度或字符串的最大输出长度 | 整数:b,c,d,o,x,X;浮点数类型:f,E,e,%;字符串类型:s |
上述的格式控制顺序必须按照相对顺序,都是可选的。
>>> '{0:*<10}'.format(s) # 填充10-6=4个*左对齐
'python****'
<.精度>来控制输出的精度:
>>> '{0:.2f}'.format(123.4567) # 控制浮点数位数
'123.46'
>>> '{0:.4}'.format('python') # 控制字符串输出位数
'pyth'
整数类型:
(1)b:整数的二进制方式
(2)c:整数对应的Unicode字符
(3)d:整数的十进制方式
(4)o:整数的八进制方式
(5)x:整数的小写十六进制方式
(6)X:输出整数的大写十六进制方式
浮点数类型:
(1)e:浮点数对应的小写字母e的指数形式
(2)E:浮点数对应的大写字母e的指数形式
(3)f:浮点数的标准浮点形式
(4)%,浮点数的百分形式