在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来进行刷新。

python实现进度条--主要用在上传下载文件的更多相关文章

  1. python实现socket上传下载文件-进度条显示

    在python的socket编程中,可以实现上传下载文件,并且在下载的时候,显示进度条,具体的流程如下图所示: 1. 服务器端代码如下: [root@python 519]# cat server.p ...

  2. 初级版python登录验证,上传下载文件加MD5文件校验

    服务器端程序 import socket import json import struct import hashlib import os def md5_code(usr, pwd): ret ...

  3. linux下常用FTP命令 上传下载文件【转】

    1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码 ...

  4. C#实现http协议支持上传下载文件的GET、POST请求

    C#实现http协议支持上传下载文件的GET.POST请求using System; using System.Collections.Generic; using System.Text; usin ...

  5. rz和sz上传下载文件工具lrzsz

    ######################### rz和sz上传下载文件工具lrzsz ####################################################### ...

  6. linux上很方便的上传下载文件工具rz和sz

    linux上很方便的上传下载文件工具rz和sz(本文适合linux入门的朋友) ##########################################################&l ...

  7. shell通过ftp实现上传/下载文件

    直接代码,shell文件名为testFtptool.sh: #!/bin/bash ########################################################## ...

  8. SFTP远程连接服务器上传下载文件-qt4.8.0-vs2010编译器-项目实例

    本项目仅测试远程连接服务器,支持上传,下载文件,更多功能开发请看API自行开发. 环境:win7系统,Qt4.8.0版本,vs2010编译器 qt4.8.0-vs2010编译器项目实例下载地址:CSD ...

  9. HttpClient上传下载文件

    HttpClient上传下载文件 java HttpClient Maven依赖 <dependency> <groupId>org.apache.httpcomponents ...

随机推荐

  1. torchnet+VGG16计算patch之间相似度

    torchnet+VGG16计算patch之间相似度 torch VGG16 similarity 本来打算使用VGG实现siamese CNN的,但是没想明白怎么使用torchnet对模型进行微调. ...

  2. hdu 4845 状压bfs(分层思想)

    拯救大兵瑞恩 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Subm ...

  3. Android下移植tcpflow

    tcpflow是linux平台下的开源抓包工具,它能监听网络url,获取http请求的各种数据.tcpflow可以说是tcpdump的简约版.要想将tcpflow移植到Android平台中,就需要通过 ...

  4. 动态创建OATipBean

    动态创建OATipBean. 动态创建的OATipBean无法直接设置提示内容,需要添加一个静态文本. 参考User Guide示例如下. If you need to create a tip pr ...

  5. 快速切题 poj 2996 Help Me with the Game 棋盘 模拟 暴力 难度:0

    Help Me with the Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3510   Accepted:  ...

  6. PHPCMS v9 二次开发_验证码结合Session开发

    本文主要讲解了在V9中使用v9自带验证码并且需要使用session的情况下,多种问题的解决.:).如有问题或者更好的解决办法,希望不吝赐教. 1.前端调用验证码 pc_base::load_sys_c ...

  7. fff

    https://qa.tutormeet.com/tutormeet/tutormeet_FF.html?lang=3&data=MjAxODAzMjcxODAwMTQ1OXwyNzQ2fGp ...

  8. 【LGR-051】洛谷9月月赛

    [LGR-051]洛谷9月月赛 luogu 签到题 description 给出\(K\)和质数\(m\),求最小的\(N\)使得\(111....1\)(\(N\)个\(1\))\(\equiv k ...

  9. Html页面Dom对象之Event

    HTML DOM Event 对象 实例 哪个鼠标按钮被点击? 光标的坐标是? 被按的按键的 unicode 是? 相对于屏幕,光标的坐标是? shift 键被按了吗? 哪个元素被点击了? 哪个事件类 ...

  10. MacOS 如何截屏

    在Mac OS X下有很强大的截屏功能,它不仅仅是对屏幕的全屏COPY,而是包括很多细节在里面,就从这点来看,已经比过所有版本的Windows了. 下面我来向大家详细介绍一下: 对全屏的截图我们可以通 ...