这几天在oschina看到了一个刷新控制台进度的脚本,就是那种最简单的刷新了,可是看了半天才明白,也不知道是水平有限呢,还是这脚本难读懂呢,呵呵,贴出来解读一下
import sys
import time
# Output example: [======= ] 75%
# width defines bar width
# percent defines current percentage
def progress(width, percent):
print "%s %d%%\r" % (('%%-%ds' % width) % (width * percent / 100 * '='), percent),
if percent >= 100:
print
()
# Simulate doing something ...
for i in xrange(100):
progress(100, (i + 1))
(1) # Slow it down for demo
里面最重要的其实就是下面这句
print "%s %d%%\r" % (('%%-%ds' % width) % (width * percent / 100 * '='), percent)
一眼看上去,这简直是一堆垃圾,全是%。
仔细看上去其实很有章法,本质上就是内嵌了几层的格式串。
假设width是100,
执行步骤如下:
1. '%%-%ds' % width
执行后 为 %-100s
2. '%-100s' % (percent * '=')
这个就是后面预留100个空位的字符串。
就是要打印的进度条的总长度,预留100个空位是为了固定百分比的位置
3. '%s %d%%\r' % (进度字符串,percent)
一目了然了
呵呵,具体执行过程就是这样,神奇吧。