2011-01-03 4 views
1

Hey, ich bin ziemlich neu im Programmieren und ich habe ein Problem mit der Python Challenge; und ich habe die genaue URL in der Hoffnung entfernt, schwere Spoiler zu vermeiden.Unerwartetes Ende des Archivs

Wie auch immer, mein Problem ist, dass ich versuche, die Datei, die ich erstellt habe, in WinRAR zu öffnen, nachdem ich den folgenden Code ausgeführt habe, und es sagt mir die Datei hat ein "unerwartetes Ende des Archivs". Natürlich habe ich versucht, meinen Code einige Male zu wiederholen, nur für den Fall, und immer noch kein Glück.

Ich habe auch die Datei mit meinem Browser von der gleichen URL abgerufen, um sicherzustellen, dass die Datei selbst nicht beschädigt ist, und öffnete es ohne Fehler, so dass ich ziemlich ratlos bin. Ich denke, ich vermisse etwas grundlegendes Element des Prozesses?

Ich schätze Ihre Hilfe im Voraus!

import urllib 

url = "http://www.pythonchallenge.com/pc/def/xxxxxxx.zip" 
site = urllib.urlopen(url) 

newfile = open(url.split('/')[-1],'w')  

newfile.write(site.read()) 

site.close() 
newfile.close() 
+0

Konnte [diese SO antworten] (http://stackoverflow.com/questions/4028697/how-do-i-download-a-zip-file -in-python-using-urllib2) wonach Sie suchen? –

Antwort

3

Ich schätze, Sie sind auf einem Windows-Rechner. (Vor allem aufgrund des "WinRAR")

newfile = open(url.split('/')[-1],'w') 

Die 'w' öffnet die Datei zum Schreiben, aber in "Text" -Modus. Im Textmodus konvertieren einige Betriebssysteme (wie Windows) '\n' in etwas anderes ('\r\n' im Fall von Windows). Um diese Übersetzung zu vermeiden, öffnen Sie die Datei im Binärmodus 'b', mit dem Schreiben 'w': 'wb'

Diese Briefe stammen aus fopen. See the manual page for fopen, wie ich finde, hat es eine bessere Beschreibung der Flaggen als die Python docs. (Beachten Sie jedoch, dass Python den Flags ein paar Dinge hinzufügt.)

+0

Ah danke, das sollte funktionieren! – TankorSmash