在Python中下载大文件

时间:2015-02-04 23:55:39

标签: python-2.7 urllib2

在python 2.7.3中,我尝试创建一个脚本来通过Internet下载文件。我使用urllib2模块。

在这里,我做了什么:

import urllib2

HTTP_client = urllib2.build_opener()
#### Here I can modify HTTP_client headers
URL = 'http://www.google.com'
data = HTTP_client.open(URL)
with open ('file.txt','wb') as f:
        f.write(data.read())

行。这很完美。

问题是当我想保存大文件(数百MB)时。我认为当我调用'open'方法时,它会将文件下载到内存中。但是,大文件怎么样?它不会在内存中保存1 GB的数据!如果我失去连接会发生什么,所有下载的部分都会丢失。

如何像在wget中一样下载Python中的大文件?在wget中,它将文件“直接”下载到硬盘中。我们可以看到文件大小增长。

我很惊讶没有方法'检索'来做像

这样的事情
HTTP_client.retrieve(URL, 'filetosave.ext')

1 个答案:

答案 0 :(得分:2)

要解决此问题,您可以一次读取数据块并将其写入文件。

req = urllib2.urlopen(url)
CHUNK = 16 * 1024
with open(file, 'wb') as fp:
  while True:
    chunk = req.read(CHUNK)
    if not chunk: break
    fp.write(chunk)