Когда я выполняю следующий код, это только, кажется, загружает первое немного файла и затем выхода. 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
Для записи бинарного файла в Windows вам нужно явно открыть его как бинарный, т.е.:
xkcdpicfile=open("C:\\Documents and Settings\\John Gann\\Desktop\\xkcd.png",
"wb")
обратите внимание на дополнительный b
в опциях: "wb"
, а не просто "w"
!
Я бы также рекомендовал отказаться от print chunk
, который может отправлять произвольные двоичные последовательности на консоль и, возможно, вызывать нежелательные побочные эффекты. Если вы хотите видеть, как бессмысленно проносятся шестнадцатеричные байты, возможно, print repr(chunk)
, если вы настаиваете. Но я бы нашел что-то более значимое, например, len(chunk)
и, возможно, общее количество байт на данный момент.