在寫一個簡單的FTP上傳下載程序時,需要一個能顯示下載進度的進度條,本想在網上找一個模塊代替的,看的眼花繚亂,故此萌發了何不自己寫一個就好了的想法!
說干就干,但是發現只是用print函數打印會不斷的換行,這不算時一個進度條應有的style,在和度娘進行千百次交流后突然發現了可以用sys.stdout.write()來實現,
所以誕生了下面這個實現進度條的代碼!

1 #!/usr/bin/env/python 2 # _*_ coding:utf-8 _*_ 3 # @Time : 2018/7/13 1:08 4 # @Author : Jingzeng Mo 5 # @Project: FTP_PROGRAM 6 7 import sys 8 import math 9 10 11 def progress_bar(portion, total): 12 """ 13 total 總數據大小,portion 已經傳送的數據大小 14 :param portion: 已經接收的數據量 15 :param total: 總數據量 16 :return: 接收數據完成,返回True 17 """ 18 part = total / 50 # 1%數據的大小 19 count = math.ceil(portion / part) 20 sys.stdout.write('\r') 21 sys.stdout.write(('[%-50s]%.2f%%' % (('>' * count), portion / total * 100))) 22 sys.stdout.flush() 23 24 if portion >= total: 25 sys.stdout.write('\n') 26 return True 27 28 29 # 調用方式 30 portion = 0 31 total = 254820000 32 while True: 33 portion += 1024 34 sum = progress_bar(portion, total) 35 if sum: 36 break 37 print("ok")
進度條樣式如下:
本程序調用了math()中的ceil()函數來實現向上取整,用與計算 “ > " 的個數,通過 sys.stdout.write("\r")實現了將指針重置到開頭,最后程序結束時,打印一個 “ \n”,
實現換行的效果!
調用時,需要兩個參數,一個是已經接收的數據量(portion)和 總的文件大小(total),通過累計傳輸的數據量和總數據量的比值實現了 顯示百分比 的計算。
所以調用時需注意:
1. portion 是不斷的累加的后的數據,而不是每次傳輸的數據量
2. 數據傳輸完畢后會返回一個值:True 並且換行
需要調用的朋友需要注意啦!
第一次發博客,若有什么好的建議,請不吝賜教!謝謝!!!