2010-04-11 168 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

相關問題