一個簡單的python3 實現進度條


在寫一個簡單的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")
View Code

進度條樣式如下:

本程序調用了math()中的ceil()函數來實現向上取整,用與計算 “ > " 的個數,通過 sys.stdout.write("\r")實現了將指針重置到開頭,最后程序結束時,打印一個 “ \n”,

實現換行的效果!

調用時,需要兩個參數,一個是已經接收的數據量(portion)和  總的文件大小(total),通過累計傳輸的數據量和總數據量的比值實現了 顯示百分比 的計算。

所以調用時需注意:

  1. portion 是不斷的累加的后的數據,而不是每次傳輸的數據量

  2. 數據傳輸完畢后會返回一個值:True 並且換行

需要調用的朋友需要注意啦!

第一次發博客,若有什么好的建議,請不吝賜教!謝謝!!!


免責聲明!

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



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