Почему я не могу скачать весь файл изображения с помощью urllib2.urlopen () - PullRequest
5 голосов
/ 11 апреля 2010

Когда я запускаю следующий код, кажется, что он загружает только первый бит файла, а затем завершает работу. Иногда я получаю ошибку 10054, но обычно она просто завершается без получения всего файла. У меня интернет-соединение дрянное беспроводное, и я часто получаю прерванную загрузку больших файлов в Firefox, но у моего браузера нет проблем с получением файла изображения 200 КБ Я новичок в python, и в целом программирую, поэтому мне интересно, какой нюанс мне не хватает.

import urllib2
xkcdpic=urllib2.urlopen("http://imgs.xkcd.com/comics/literally.png")
xkcdpicfile=open("C:\\Documents and Settings\\John Gann\\Desktop\\xkcd.png","w")
while 1:
    chunk=xkcdpic.read(4028)
    if chunk:
        print chunk
        xkcdpicfile.write(chunk)
    else:
        break

1 Ответ

10 голосов
/ 11 апреля 2010

Чтобы записать бинарный файл в Windows, вам нужно явно открыть как двоичный файл, т. Е .:

xkcdpicfile=open("C:\\Documents and Settings\\John Gann\\Desktop\\xkcd.png",
                 "wb")

обратите внимание на дополнительные b в опциях: "wb", не просто "w"!

Я бы также рекомендовал потерять print chunk, который может посылать произвольные двоичные последовательности на консоль и, возможно, вызывать нежелательные побочные эффекты. Если вы хотите увидеть, как шестнадцатеричные байты бессмысленно звучат, может быть, print repr(chunk), если вы настаиваете. Но я бы нашел что-то более значимое, чтобы показать, например, len(chunk) и, возможно, общее количество байтов на данный момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...