python - 使用 python 下载大 zip 文件

标签 python download urllib2 zip

我有多个返回 zip 文件的 URL。大多数文件,我可以使用 urllib2 库下载,如下所示:

request = urllib2.urlopen(url)
zip_file = request.read()

我遇到的问题是其中一个文件大小为 35Mb(压缩后),我永远无法使用此库完成下载。我可以正常使用 wget 和浏览器下载它。

我尝试过像这样分块下载文件:

request = urllib2.urlopen(url)
buffers = []
while True:
    buffer = request.read(8192)
    if buffer:
        buffers.append(buffer)
    else:
        break
final_file = ''.join(buffers)

但这也没有完成下载。不会引发任何错误,因此很难调试正在发生的情况。不幸的是,我无法在此处发布网址/文件的示例。

有什么建议吗?

最佳答案

这是从我的应用程序复制/粘贴的内容,它下载自己的更新安装程序。它以 block 的形式读取文件,并立即将输出文件中的 block 保存在磁盘上。

def DownloadThreadFunc(self):
    try:
        url = self.lines[1]
        data = None
        req = urllib2.Request(url, data, {})
        handle = urllib2.urlopen(req)

        self.size = int(handle.info()["Content-Length"])
        self.actualSize = 0
        name = path.join(DIR_UPDATES, url.split("/")[-1])
        blocksize = 64*1024

        fo = open(name, "wb")
        while not self.terminate:
            block = handle.read(blocksize)
            self.actualSize += len(block)
            if len(block) == 0:
                break
            fo.write(block)
        fo.close()
    except (urllib2.URLError, socket.timeout), e:
        try:
            fo.close()
        except:
            pass
        error("Download failed.", unicode(e))  

我使用 self.sizeself.actualSize 在 GUI 线程中显示下载进度,并使用 self.terminate 取消下载GUI 按钮(如果需要)。

关于python - 使用 python 下载大 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10305249/

相关文章:

python - 如何在Python中求解阶跃函数?

java - 通过sockets java下载图片

python - 失败时如何重试 urllib2.request?

python - 在Python中打开网站框架或图像

python - 预期单例 : hr. employee(1, 2)

Python 正则表达式循环跳过每三个项目

带对话框保存文件的 Java 下载管理器

python - 如何查明网站是否使用 cookie 或基于 http 的身份验证

python - (django 测试)assertIs 错误

javascript - 如何在下载前强行打开文件浏览器保存文件?