进度条的代码如下:



1. #!/usr/bin/env python  
2.   
3. from __future__ import division  
4. import math  
5. import sys  
6. def progressbar(cur,total):  
7. '{:.2%}'.format(cur / total)  
8. '\r')  
9. '[%-50s] %s' % ( '=' * int(math.floor(cur * 50 /total)),percent))  
10.     sys.stdout.flush()  
11. if cur == total:  
12. '\n')  
13.   
14. if __name__ == '__main__':  
15. 102400000  
16. 1024  
17. while file_size > 0:  
18. 10/file_size,10)  
19. 1024  
20.   
21. #for i in range(11):  
22. #    progressbar(i,10)  
23. #    time.sleep(1)



在进行计算百分比的时候,需要用到除法,而基本上都是整数,从而使用到dicision。

在函数progressbar中,cur表示当前的数值,total表示总的数值。

在输出进度的时候,每次都是输出一行,但是每次输出的时候不换行,从而使用\r,每次回到行首,但是不进行换行,然后输出其他的内容对原内容进行覆盖,也就是sys.stdout.write的第二句话。

flush是为了立即进行显示,也就是将进度条直接显示。

在最后,如果当前的等于总的,那么久输出一个回车进行换行,表示输出进度结束。


在测试代码中,file_size表示为文件的大小,size表示每次都要传送的数据量,在循环中,表示每次需要传送1024个字节,然后输出进度条,运行效果如下:



    1. [root@python 519]# python processbar.py  
    2. [==================================================] 100.00%


    主要就是在开始的时候,觉得需要知道传输文件的速度,才能估算传输的进度,但是使用文件的大小也是可以估算的,从而也就有了size*10/1024,将长度固定为10个,从而输出进度。


    在看第二句输出的时候覆盖的时候,可以使用如下的代码:




    1. #!/usr/bin/env python  
    2.   
    3. import sys  
    4.   
    5. sys.stdout.write('[%-10s]' % ('='*3))  
    6. sys.stdout.flush()



    运行之后会发现进行了替代。其中减号表示向左对齐,10表示使用十个占位符,后面的替换中,表示使用等号替换前三个空格,在每次数量增加后,从而每次替换的数量增多,从而达到运行时候的覆盖效果,从而看起来是动态的进度条。


    注意,在python的解释器中直接运行的时候,会输出和在py文件中不一样,是因为在解释器中直接执行了,在py文件中,需要时使用flush来进行刷新。


    ###########################



    第二种方法:


    1. # -*- coding:utf-8 -*-  
    2. import sys  
    3. import time  
    4.   
    5. def view_bar(num, total):  
    6. #得到现在的比率,0<rate<1  
    7. 100)                #将比率百分化,0<rate_num<100  
    8. '\r[%s%s]' % (">"*num, " "*(100-num)) #进度条封装  
    9. #显示进度条  
    10. '%')            #显示进度百分比  
    11. #使输出变得平滑  
    12. def downloading():  
    13. print('开始下载...')  
    14. for i in range(0, 101):  
    15. 0.05)  
    16. 100)  
    17. print('\n下载完成。')  
    18. if __name__ == '__main__':  
    19.     downloading()

    ############################