在写一个简单的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 importsys8 importmath9
10
11 defprogress_bar(portion, total):12 """
13 total 总数据大小,portion 已经传送的数据大小14 :param portion: 已经接收的数据量15 :param total: 总数据量16 :return: 接收数据完成,返回True17 """
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 returnTrue27
28
29 #调用方式
30 portion =031 total = 254820000
32 whileTrue:33 portion += 1024
34 sum =progress_bar(portion, total)35 ifsum:36 break
37 print("ok")
View Code
进度条样式如下:
本程序调用了math()中的ceil()函数来实现向上取整,用与计算 “ > " 的个数,通过 sys.stdout.write("\r")实现了将指针重置到开头,最后程序结束时,打印一个 “ \n”,
实现换行的效果!
调用时,需要两个参数,一个是已经接收的数据量(portion)和 总的文件大小(total),通过累计传输的数据量和总数据量的比值实现了 显示百分比 的计算。
所以调用时需注意:
1. portion 是不断的累加的后的数据,而不是每次传输的数据量
2. 数据传输完毕后会返回一个值:True 并且换行
需要调用的朋友需要注意啦!
第一次发博客,若有什么好的建议,请不吝赐教!谢谢!!!