Почему я не могу загрузить целый файл изображения urllib2.urlopen ()

Когда я выполняю следующий код, это только, кажется, загружает первое немного файла и затем выхода. Occassionally, я получу 10 054 ошибки, но обычно он просто выходит, не получая целый файл. Мое интернет-соединение является дрянной беспроводной связью, и я часто получаю поврежденные загрузки на больших файлах в Firefox, но мой браузер не имеет никакой проблемы при получении 200k файла изображения. Я плохо знаком с 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
5
задан Matti Virkkunen 11 April 2010 в 00:35
поделиться

1 ответ

Для записи бинарного файла в Windows вам нужно явно открыть его как бинарный, т.е.:

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

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

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

10
ответ дан 13 December 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: