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

  • 相关阅读:
    win7下的vxworks总结
    ubuntu 无法获得锁 /var/lib/dpkg/lock
    项目中用到了的一些批处理文件
    win7下安装 WINDRIVER.TORNADO.V2.2.FOR.ARM
    使用opencv统计视频库的总时长
    January 05th, 2018 Week 01st Friday
    January 04th, 2018 Week 01st Thursday
    January 03rd, 2018 Week 01st Wednesday
    January 02nd, 2018 Week 01st Tuesday
    January 01st, 2018 Week 01st Monday
  • 原文地址:https://www.cnblogs.com/kindnull/p/8464247.html
Copyright © 2011-2022 走看看