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('\r')  
    sys.stdout.write('[%-50s] %s' % ( '=' * int(math.floor(cur * 50 /total)),percent))  
    sys.stdout.flush()  
    if cur == total:  
        sys.stdout.write('\n')  
  
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表示總的數值。

在輸出進度的時候,每次都是輸出一行,但是每次輸出的時候不換行,從而使用\r,每次回到行首,但是不進行換行,然后輸出其他的內容對原內容進行覆蓋,也就是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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM