在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')
答案 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)