2010-10-07 6 views
3

J'ai configuré un script pour télécharger un mp3 en utilisant urllib2 en Python.Télécharger Mp3 en utilisant Python dans Windows mangles la chanson cependant dans Linux il ne fonctionne pas

url = 'example.com' 
req2 = urllib2.Request(url) 
response = urllib2.urlopen(req2) 

#grab the data 
data = response.read() 

mp3Name = "song.mp3" 
song = open(mp3Name, "w") 
song.write(data) # was data2 
song.close() 

Il s'avère que c'était en quelque sorte lié à mon téléchargement sur Windows ou sur ma version actuelle de Python. J'ai testé le code sur ma distribution Ubuntu et le fichier mp3 téléchargé parfaitement bien ... Donc j'ai juste utilisé la méthode simple urllib2.openurl et ça a fonctionné parfaitement!

Pour résumer:

  • J'utilise urllib2.openurl en Python sur une distro Ubuntu.
  • J'utilise une version plus récente de Python mais j'ai l'impression que ça ne peut pas être ça.
  • Les mp3 sont encodés dans LAME.

Est-ce que quelqu'un a une idée de ce qui causait le problème bizarre l'exécution du code sur mon Windows Box? Je me demande pourquoi le téléchargement sur Windows a brouillé le mp3?

Répondre

13

Essayez le mode de fichier binaire. open(mp3Name, "wb") Vous obtenez probablement des traductions de fin de ligne.

Le fichier est binaire, oui. C'est le mode qui ne l'était pas. Lorsqu'un fichier est ouvert, il peut être configuré pour lire en tant que fichier texte (c'est par défaut). Quand il le fait, il va convertir les fins de ligne pour correspondre à la plate-forme. Sous Windows, les fins de ligne sont \r\n. Dans la plupart des autres endroits, il s'agit de \r ou de \n. Cette modification perturbe le flux de données.

+0

dang fou! Je pensais que c'était déjà binaire sinon ça ne jouerait pas. Je pensais que c'était par défaut! – Setheron

+0

@Setheron: J'ai ajouté un peu de détail à la réponse. – JoshD

Questions connexes