zoukankan      html  css  js  c++  java
  • python实现进度条--主要用在上传下载文件

    在python中进行socket上传文件的时候使用进度条,然后在网上找了好久,找寻相关的进度的条的使用,看了几个,发现总是无法进行调用,主要原因是在进行上传文件的时候,每次传送的数据量是固定的,数据的总大小也是知道的,对于那么多的进度条的使用调用方法感觉总是不合适,今天终于发现了如何调用比较好。

    进度条的代码如下:

    #!/usr/bin/env python  
      
    from __future__ import division  
    import math  
    import sys  
    def progressbar(cur,total):  
        percent = '{:.2%}'.format(cur / total)  
        sys.stdout.write('
    ')  
        sys.stdout.write('[%-50s] %s' % ( '=' * int(math.floor(cur * 50 /total)),percent))  
        sys.stdout.flush()  
        if cur == total:  
            sys.stdout.write('
    ')  
      
    if __name__ == '__main__':  
        file_size = 102400000  
        size = 1024  
        while file_size > 0:  
            progressbar(size*10/file_size,10)  
            file_size -= 1024  
      
        #for i in range(11):  
        #    progressbar(i,10)  
        #    time.sleep(1)
    

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

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

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

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

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


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

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

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

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

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

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

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

    摘自:https://www.cnblogs.com/kellyseeme/p/5525020.html

  • 相关阅读:
    Android Studio Tips -- 布局预览
    weibo sdk Multiple dex files define Lcom/sina/weibo/sdk/BuildConfig
    Android Studio下添加assets目录
    Android中bitmap图片透明度的处理(以撕美女衣服为例)
    Android中使用ViewPage进行广告轮播测试代码
    比赛现场打分管理平台概述
    排行榜每页默认为8行,如何把默认行数改成12行或其他行数?
    复习重点补充-
    字典读写训练
    Python爬网常见方法:find_all与re的结合使用
  • 原文地址:https://www.cnblogs.com/kindnull/p/8464334.html
Copyright © 2011-2022 走看看