2010-04-11 101 views
5

下载整个图像文件当我运行以下代码时,它似乎只是下载文件的第一个小部分,然后退出。有时候,我会得到10054错误,但通常只是退出而没有得到整个文件。我的网络连接是蹩脚的无线网络,而且我经常在firefox中的大文件上下载失败的文件,但我的浏览器在获取200k图像文件时没有问题。我是Python的新手,一般编程,所以我想知道我错过了什么细微差别。为什么我无法使用urllib2.urlopen()

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 

回答

10

要编写在Windows二进制文件,你需要明确开放它作为二进制,即:

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

注意额外b在选项:"wb"只是"w"

我也建议丢失print chunk这可能会发送任意二进制序列到控制台,并可能导致不良副作用。如果你想要毫无意义地看到十六进制字节,也许print repr(chunk),如果你坚持。但我会找到更有意义的东西来展示,例如len(chunk),也许到目前为止的总字节数。

+0

谢谢。现在工作。我从来没有注意到在本地处理文件“w”和“wb”之间的区别,即使是图像。 – 2010-04-11 01:27:18

相关问题