作用:文件从网络位置复制到本地位置,并且可以显示下载进度。
参数:
import six.moves import urllib
urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None)
参数说明:
url: 网络对象地址,若url指向本地文件,对象不会被复制,除非提供文件名。
filename:保存到本地的路径,(若未指定,会生成一个临时文件保存数据)
reporthook:回调函数,连接上服务器以及相应的数据块传输完毕会触发该函数,显示当前下载进度。
data:post到服务器的数据。
返回值:元祖(filename, headers),filename保存到本地的路径,header:服务器的响应头。
例子:
import os
from six.moves import urllib
import sys
DATA_URL = 'http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2'
filename = DATA_URL.split('/')[-1]
def _progress(block_num, block_size, total_size):
'''回调函数
@block_num: 已经下载的数据块
@block_size: 数据块的大小
@total_size: 远程文件的大小
'''
sys.stdout.write('\r>> Downloading %s %.1f%%' % (filename,
float(block_num * block_size) / float(total_size) * 100.0))
sys.stdout.flush()
filepath, _ = urllib.request.urlretrieve(DATA_URL, filename, _progress)
print()
sys.stdout.write和print差不多是输出的意思,sys.stdout.flush()函数的作用是刷新输出