这是一个很方便的模块:progress_bar
。
它很简短,足够简单;阅读源代码可以为实现自己的进度条提供思路。
这是一段非常简单的代码,我希望能让事情更加清晰:
import time, sys
def carriage_return_a():
sys.stdout.write('\r')
sys.stdout.flush()
def carriage_return_b():
if sys.platform.lower().startswith('win'):
print '\r'
else:
print chr(27) + '[A'
bar_len = 10
for i in range(bar_len + 1):
bar = ''.join(['*'] * i + [' '] * (bar_len - i))
print '[{0}] {1}'.format(bar, i),
carriage_return_a()
time.sleep(1)
正如其他人所观察到的,为了有一个非常有意义的进度条,你仍然需要知道文件中的总行数。最简单的方法是读取整个文件以获取行数;但那太浪费了。
将其融入一个简单的类并不太难...现在你可以创建进度条并在感兴趣的值更改时update()
它。
class SimpleProgressBar(object):
def __init__(self, maximum, state=0):
self.max = maximum
self.state = state
def _carriage_return(self):
sys.stdout.write('\r')
sys.stdout.flush()
def _display(self):
stars = ''.join(['*'] * self.state + [' '] * (self.max - self.state))
print '[{0}] {1}/{2}'.format(stars, self.state, self.max),
self._carriage_return()
def update(self, value=None):
if not value is None:
self.state = value
self._display()
spb = SimpleProgressBar(10)
for i in range(0, 11):
time.sleep(.3)
spb.update(i)
100*current_iteration/total_iterations
%的工作。 - prelic