2011-01-03 14 views
1

Hé là, je suis assez nouveau pour la programmation et j'ai un problème avec le Python Challenge; et j'ai enlevé l'URL exacte dans l'espoir d'éviter de lourds spoilers.Fin inattendue des archives

Quoi qu'il en soit, mon problème est que j'essaie d'ouvrir le fichier que j'ai créé, dans WinRAR après avoir exécuté le code suivant, et il me dit que le fichier a un "inattendu de fin d'archive". Naturellement, j'ai essayé de relancer mon code plusieurs fois juste au cas où, et toujours pas de chance.

J'ai également saisi le fichier avec mon navigateur à partir de la même URL pour m'assurer que le fichier lui-même n'est pas endommagé, et l'ai ouvert sans aucune erreur, donc je suis assez perplexe. Je suppose que je manque un élément de base du processus?

J'apprécie votre aide à l'avance!

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

Est-ce que [SO answer answer] (http://stackoverflow.com/questions/4028697/how-do-i-download-a-zip-file -in-python-using-urllib2) soyez ce que vous cherchez? –

Répondre

3

Je suppose que vous êtes sur une machine Windows. (La plupart du temps en raison de "WinRAR")

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

Le 'w' ouvre le fichier pour l'écriture, mais en mode "texte". En mode texte, certains systèmes d'exploitation (comme Windows) convertissent '\n' en autre chose ('\r\n' dans le cas de Windows). Pour éviter cette traduction, ouvrez le fichier en mode binaire 'b', avec l'écriture 'w': 'wb'

Ces lettres proviennent de fopen. See the manual page for fopen, car je pense qu'il a une meilleure description des drapeaux que le Python docs. (Notez cependant que Python ajoute un certain nombre de choses aux drapeaux.)

+0

Ah merci, ça devrait marcher! – TankorSmash

Questions connexes