在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. linux三尖刀

    序 我们都知道,一个可执行程序的基本的生命过程是如此的: (编辑)源文件--->(编译)目标文件--->(链接)可执行文件--->(调试排错)稳定执行 所以,在这个过程中,我们很容易 ...

  2. 彻底明白IP地址——计算相关地址

    知道ip地址和子网掩码后可以算出: 1. 网络地址 2. 广播地址 3. 地址范围 4. 本网有几台主机 例1:下面例子IP地址为192·168·100·5 子网掩码是255·255·255·0.算出 ...

  3. 导入arr包

    提起项目的aar包 导入目标项目中 添加依赖 

  4. 适配器 STL

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  5. django-pure-pagination使用方法

    1.pip install django-pure-pagination  安装包. 2.加入app: 'pure_pagination', 3.在view中写入分布逻辑. try: page = r ...

  6. 关于CMD中延迟环境变量嵌套的实现方法

    在我昨天做的一个bat中(自动按日期重命名文件名)涉及到这方面的问题 以前涉及到这里时就想别的办法替代过去,今天好好扒出来说说: 实现变量嵌套的2种方法: 1,使用call实现变量嵌套 变量嵌套:即在 ...

  7. 腾讯云 服务器 ubuntu 16.04 python3 环境

    积分 - 164 排名 - 183650 首先把腾讯云上的服务器,重装系统,选择64位ubuntu16.04,最低配也要用64位的…… 装好后,首先切换 python 版本: sudo update- ...

  8. rancher下的kubernetes之二:安装rancher和kubernetes

    在上一章<rancher下的kubernetes之一:构建标准化vmware镜像>,我们做了个通用的虚拟机镜像,可以root登录,apt已经更新,docker也装好了,现在我们就来安装ra ...

  9. BZOJ4881: [Lydsy1705月赛]线段游戏(二分图)

    4881: [Lydsy1705月赛]线段游戏 Time Limit: 3 Sec  Memory Limit: 256 MBSubmit: 359  Solved: 205[Submit][Stat ...

  10. python3 tkinter 桌面软件教程

    效果图 """"brid布局""" from tkinter import * import tkinter.filedialog ...