最近造轮子写了一个ftp,其中的进度条用了Progressbar模块,鉴于百度上没有找到合适的相关资料,于是准备写一个例子供大家参考。
progressbar官方例子:
#coding:utf-8
import sys
import time
from progressbar import AnimatedMarker, Bar, BouncingBar, Counter, ETA, \
FileTransferSpeed, FormatLabel, Percentage, \
ProgressBar, ReverseBar, RotatingMarker, \
SimpleProgress, Timer
examples = []
def example(fn):
try: name = 'Example %d' % int(fn.__name__[7:])
except: name = fn.__name__
def wrapped():
try:
sys.stdout.write('Running: %s\n' % name)
fn()
sys.stdout.write('\n')
except KeyboardInterrupt:
sys.stdout.write('\nSkipping example.\n\n')
examples.append(wrapped)
return wrapped
@example
def example0():
pbar = ProgressBar(widgets=[Percentage(), Bar()], maxval=300).start()
for i in range(300):
time.sleep(0.01)
pbar.update(i+1)
pbar.finish()
@example
def example1():
widgets = ['Test: ', Percentage(), ' ', Bar(marker=RotatingMarker()),
' ', ETA(), ' ', FileTransferSpeed()]
pbar = ProgressBar(widgets=widgets, maxval=10000000).start()
for i in range(1000000):
# do something
pbar.update(10*i+1)
pbar.finish()
@example
def example2():
class CrazyFileTransferSpeed(FileTransferSpeed):
"""It's bigger between 45 and 80 percent."""
def update(self, pbar):
if 45 < pbar.percentage() < 80:
return 'Bigger Now ' + FileTransferSpeed.update(self,pbar)
else:
return FileTransferSpeed.update(self,pbar)
widgets = [CrazyFileTransferSpeed(),' <<<', Bar(), '>>> ',
Percentage(),' ', ETA()]
pbar = ProgressBar(widgets=widgets, maxval=10000000)
# maybe do something
pbar.start()
for i in range(2000000):
# do something
pbar.update(5*i+1)
pbar.finish()
@example
def example3():
widgets = [Bar('>'), ' ', ETA(), ' ', ReverseBar('<')]
pbar = ProgressBar(widgets=widgets, maxval=10000000).start()
for i in range(1000000):
# do something
pbar.update(10*i+1)
pbar.finish()
@example
def example4():
widgets = ['Test: ', Percentage(), ' ',
Bar(marker='0',left='[',right=']'),
' ', ETA(), ' ', FileTransferSpeed()]
pbar = ProgressBar(widgets=widgets, maxval=500)
pbar.start()
for i in range(100,500+1,50):
time.sleep(0.2)
pbar.update(i)
pbar.finish()
@example
def example5():
pbar = ProgressBar(widgets=[SimpleProgress()], maxval=17).start()
for i in range(17):
time.sleep(0.2)
pbar.update(i + 1)
pbar.finish()
@example
def example6():
pbar = ProgressBar().start()
for i in range(100):
time.sleep(0.01)
pbar.update(i + 1)
pbar.finish()
@example
def example7():
pbar = ProgressBar() # Progressbar can guess maxval automatically.
for i in pbar(range(80)):
time.sleep(0.01)
@example
def example8():
pbar = ProgressBar(maxval=80) # Progressbar can't guess maxval.
for i in pbar((i for i in range(80))):
time.sleep(0.01)
@example
def example9():
pbar = ProgressBar(widgets=['Working: ', AnimatedMarker()])
for i in pbar((i for i in range(50))):
time.sleep(.08)
@example
def example10():
widgets = ['Processed: ', Counter(), ' lines (', Timer(), ')']
pbar = ProgressBar(widgets=widgets)
for i in pbar((i for i in range(150))):
time.sleep(0.1)
@example
def example11():
widgets = [FormatLabel('Processed: %(value)d lines (in: %(elapsed)s)')]
pbar = ProgressBar(widgets=widgets)
for i in pbar((i for i in range(150))):
time.sleep(0.1)
@example
def example12():
widgets = ['Balloon: ', AnimatedMarker(markers='.oO@* ')]
pbar = ProgressBar(widgets=widgets)
for i in pbar((i for i in range(24))):
time.sleep(0.3)
@example
def example13():
# You may need python 3.x to see this correctly
try:
widgets = ['Arrows: ', AnimatedMarker(markers='←↖↑↗→↘↓↙')]
pbar = ProgressBar(widgets=widgets)
for i in pbar((i for i in range(24))):
time.sleep(0.3)
except UnicodeError: sys.stdout.write('Unicode error: skipping example')
@example
def example14():
# You may need python 3.x to see this correctly
try:
widgets = ['Arrows: ', AnimatedMarker(markers='◢◣◤◥')]
pbar = ProgressBar(widgets=widgets)
for i in pbar((i for i in range(24))):
time.sleep(0.3)
except UnicodeError: sys.stdout.write('Unicode error: skipping example')
@example
def example15():
# You may need python 3.x to see this correctly
try:
widgets = ['Wheels: ', AnimatedMarker(markers='')]
pbar = ProgressBar(widgets=widgets)
for i in pbar((i for i in range(24))):
time.sleep(0.3)
except UnicodeError: sys.stdout.write('Unicode error: skipping example')
@example
def example16():
widgets = [FormatLabel('Bouncer: value %(value)d - '), BouncingBar()]
pbar = ProgressBar(widgets=widgets)
for i in pbar((i for i in range(180))):
time.sleep(0.05)
@example
def example17():
widgets = [FormatLabel('Animated Bouncer: value %(value)d - '),
BouncingBar(marker=RotatingMarker())]
pbar = ProgressBar(widgets=widgets)
for i in pbar((i for i in range(180))):
time.sleep(0.05)
@example
def example18():
widgets = [Percentage(),
' ', Bar(),
' ', ETA(),
' ', AdaptiveETA()]
pbar = ProgressBar(widgets=widgets, maxval=500)
pbar.start()
for i in range(500):
time.sleep(0.01 + (i < 100) * 0.01 + (i > 400) * 0.9)
pbar.update(i + 1)
pbar.finish()
@example
def example19():
pbar = ProgressBar()
for i in pbar([]):
pass
pbar.finish()
try:
for example in examples:
example()
except KeyboardInterrupt:
sys.stdout('\nQuitting examples.\n')
单个例子
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Pw @ 2015-12-13 01:21:45
# Description:
__author__ = 'Jiwen Zheng'
from progressbar import Bar,Percentage,ProgressBar,RotatingMarker
import time
def p_bar():
widgets = ['Download: ', Percentage(), ' ', Bar(marker=RotatingMarker()),]
pbar = ProgressBar(widgets=widgets, maxval=100).start()
return pbar
pbar=p_bar()
for i in range(100):
time.sleep(0.05)
pbar.update(i)
pbar.finish()
ftp中的应用,挑其中一个进度条example1
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Pw @ 2015-12-13 01:21:45
# Description:
__author__ = 'Jiwen Zheng'
from progressbar import Bar,Percentage,ProgressBar,RotatingMarker
import time
百分比=
def p_bar():
#download可以自己修改,想了解其他的特性自己看源码吧
widgets = ['Download: ', Percentage(), ' ', Bar(marker=RotatingMarker()),]
pbar = ProgressBar(widgets=widgets, maxval=100).start()
return pbar
pbar=p_bar()
value=文件大小/100 # 。。。
flag=False
while 文件大小 != 已接收文件大小:
value2=已接收文件大小/value
pbar.update(value2)
if value2==100:
flag=True
pbar.update(100)
pbar.finish()
if not flag:
pbar.update(100)
pbar.finish()
执行效果
转载于:https://blog.51cto.com/jzzjw/1727858