# -*- coding: utf-8 -*-
__author__ = 'gull'
import os, urllib2, log_factory
from urlparse import urlsplit
def get(url, filePath, fileName = None, buffer = 16 * 1024):
log = log_factory.getLogger()
log.info("send http request to %s", url)
def writefile(fsrc, fdst, totalLength):
"""copy data from file-like object fsrc to file-like object fdst"""
if not totalLength:
totalLength = "?"
else:
totalLength = float(totalLength)
bytesRead = 0.0
while 1:
buf = fsrc.read(buffer)
if not buf:
break
fdst.write(buf)
bytesRead += len(buf)
if totalLength != "?":
log.info("%s: %.02f/%.02f kb (%d%%)" % (
fileName,
bytesRead / 1024.0,
totalLength / 1024.0,
100 * bytesRead / totalLength
))
else:
log.info("%s: %.02f/? kb (?%%)" % (
fileName,
bytesRead / 1024.0
))
def getFileName(openUrl):
if 'Content-Disposition' in openUrl.info():
# If the response has Content-Disposition, try to get filename from it
cd = dict(map(
lambda x: x.strip().split('=') if '=' in x else (x.strip(), ''),
openUrl.info().split(';')))
if 'filename' in cd:
filename = cd['filename'].strip("\"'")
if filename: return filename
# if no filename was found above, parse it out of the final URL.
return os.path.basename(urlsplit(openUrl.url)[2])
def getFileLength(openUrl):
return openUrl.info().getheader("Content-Length")
r = urllib2.urlopen(urllib2.Request(url), timeout = 120) #timeout is 120s
try:
fileName = fileName or getFileName(r)
fullfileName = "%s%s%s" % (filePath, os.path.sep, fileName)
totalLength = getFileLength(r)
log.info("write response date to %s", fullfileName)
with open(fullfileName, 'wb') as f:
writefile(r, f, totalLength)
return fileName, totalLength, fullfileName
finally:
r.close()
log.info("http request finished.")
参数说明:
- url:即下载路径,如http://apache.etoak.com/tomcat/tomcat-7/v7.0.20/bin/apache-tomcat-7.0.20.tar.gz
- filePath:下载文件保存的文件夹
- fileName:下载后保存的文件名,可选参数。若为空,则会却reponse header中的filename信息(如下图)继续判空,则取url后缀名(如:apache-tomcat-7.0.20.tar.gz)
可继续加入以下特性:
- 支持代理
- 文件分块,多线程下载
- 异步下载,回调机制
- ...
- 大小: 19.6 KB
分享到:
相关推荐
python-3.10.8 64位windows 安装包,直接双击安装即可,包内文件名为:python-3.10.8-amd64.exe
原来是通过命令行下载的docx安装包还没有完全兼容python3,估计这个安装包还只兼容python 2(python2 和python3差别还是挺大的,虽然现在python 3出来很久了,但是不少三方库还没有更新),因此需要自己找一个兼容的包...
python2.5--安装包--windows...........
python-3.7.9-amd64.exe安装文件,win7/10系统直接安装
Mac OS的Monterey版本可用的python2.7,官方版本,官方地址:https://www.python.org/ftp/python/2.7.18/python-2.7.18-macosx10.9.pkg,转存于CSDN。
最近ubuntu14.04出了问题,pkg-catkin-pkg无法下载,我7月底重装了一次Ubuntu14.04,安装ros lidigo时报错,依赖python-catkin-pkg,但它不会被安装,我刚开始发现这个问题时试过换源,重装系统均不成功,后面去官方...
python-3.7.0-amd64 安装包
python-2.7.5-90.el7.x86_64.rpm
最新版 python-3.9.0-amd64.zip最新版 python-3.9.0-amd64.zip最新版 python-3.9.0-amd64.zip
python-3.8.0-amd64.exe, python-windows平台,使用64位,exe安装包
python-3.7.8-amd64.exe 免费资源请放心下载 免费资源请放心下载 免费资源请放心下载 免费资源请放心下载
最新版windows python-3.8.6-amd64.exe最新版windows python-3.8.6-amd64.exe
python-2.5.2-1.aix6.1.ppc.rpm python 2.5.2 for AIX 6.1 PowerPC PPC RPM
python-urlgrabber-3.9.1-11.el6.noarch.rpm
OpenCV-Python-Toturial-中文版.pdf
python-backports-ssl_match_hostname-3.5.0.1-1.el7.noarch.rpm python-backports-1.0-8.el7.x86_64.rpm python-urlgrabber-3.10-9.el7.noarch.rpm yum库包(共6个): yum-utils-1.1.31-52.el7.noarch.rpm yum...
python-3.7.3-amd64.exe Python 3.7.3 for Windows x64位 or 32位 Windows x86-64 executable installer MD5: a2b79563476e9aa47f11899a53349383 File Size: 26190920 请不要给我5星好评,因为好评会上涨下载积分!
其实pip list python-docx 安装不成功,安装一般就报错,主要原因是从官网的下载不稳定,而且慢,经常会断,只能先下下来,然后放到cmd所在的文件夹或者指定路径,pip list python-docx-0.8.10.tar.gz,很快就好了!
opencv_python-4.4.0-cp36-cp36m-win_amd64.whl python 3.6 版本的64位计算机的opencv本地安装文件
python-urlgrabber-3.10-8.el7.noarch.rpm资源包,资源包,为什么不能0分……………………