2015-02-04 4 views
0

В python 2.7.3 я пытаюсь создать скрипт для загрузки файла через Интернет. Я использую модуль urllib2.Загрузка больших файлов в Python

Вот, что я сделал:

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()) 

OK. Это прекрасно работает.

Проблема в том, когда я хочу сохранить большие файлы (сотни МБ). Я думаю, что когда я вызываю метод «open», он загружает файл в память. Но как насчет больших файлов? Он не сохранит 1 ГБ данных в памяти! Что произойдет, если я потерял соединение, вся загруженная часть будет потеряна.

Как загрузить большие файлы в Python, например, wget? В wget он загружает файл «прямо» на жесткий диск. Мы можем видеть, что файл вырос в размерах.

Я удивлен, что нет никакого способа «получить» для этого таких вещей, как

HTTP_client.retrieve(URL, 'filetosave.ext') 
+0

Возможный дубликат [больших двоичных файлов Стрим с urllib2 в файл] (http://stackoverflow.com/questions/1517616/stream-large-binary-files-with-urllib2-to-file) –

ответ

1

Чтобы решить эту проблему, вы можете прочитать куски в то время, и записать их в файл.

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) 
+3

это это ответ, скопированный из другого потока, вы должны связать его или по крайней мере зачислить. (Http://stackoverflow.com/a/1517728/754484) –

Смежные вопросы