নীচের কোডটি বেশ সাধারণ সমাধান এবং এতে একটি সময় অতিবাহিত এবং সময় বাকী অনুমানও রয়েছে। আপনি এটির সাথে যে কোনও পুনরাবৃত্তিযোগ্য ব্যবহার করতে পারেন। অগ্রগতি বারের 25 টি অক্ষরের একটি নির্দিষ্ট আকার থাকে তবে এটি পূর্ণ, অর্ধেক এবং কোয়ার্টার ব্লক অক্ষর ব্যবহার করে 1% ধাপে আপডেটগুলি দেখাতে পারে। আউটপুটটি দেখতে এমন দেখাচ্ছে:
18% |████▌ | \ [0:00:01, 0:00:06]
উদাহরণ সহ কোড:
import sys, time
from numpy import linspace
def ProgressBar(iterObj):
def SecToStr(sec):
m, s = divmod(sec, 60)
h, m = divmod(m, 60)
return u'%d:%02d:%02d'%(h, m, s)
L = len(iterObj)
steps = {int(x):y for x,y in zip(linspace(0, L, min(100,L), endpoint=False),
linspace(0, 100, min(100,L), endpoint=False))}
qSteps = ['', u'\u258E', u'\u258C', u'\u258A'] # quarter and half block chars
startT = time.time()
timeStr = ' [0:00:00, -:--:--]'
activity = [' -',' \\',' |',' /']
for nn,item in enumerate(iterObj):
if nn in steps:
done = u'\u2588'*int(steps[nn]/4.0)+qSteps[int(steps[nn]%4)]
todo = ' '*(25-len(done))
barStr = u'%4d%% |%s%s|'%(steps[nn], done, todo)
if nn>0:
endT = time.time()
timeStr = ' [%s, %s]'%(SecToStr(endT-startT),
SecToStr((endT-startT)*(L/float(nn)-1)))
sys.stdout.write('\r'+barStr+activity[nn%4]+timeStr); sys.stdout.flush()
yield item
barStr = u'%4d%% |%s|'%(100, u'\u2588'*25)
timeStr = ' [%s, 0:00:00]\n'%(SecToStr(time.time()-startT))
sys.stdout.write('\r'+barStr+timeStr); sys.stdout.flush()
# Example
s = ''
for c in ProgressBar(list('Disassemble and reassemble this string')):
time.sleep(0.2)
s += c
print(s)
উন্নতির জন্য পরামর্শ বা অন্যান্য মন্তব্য প্রশংসা করা হয়। চিয়ার্স!