2014-09-27 96 views
0

我寫了這個腳本從我的內聯網音樂播放器上的播放列表中下載歌曲。腳本似乎在Ubuntu中工作正常,但在Windows中它不能正確寫入mp3文件,每個文件中只有2-3秒的噪音沒有別的。爲什麼這個Python腳本不能在Windows上正確寫入mp3文件?

import urllib2 
import json 
import os 
import argparse 

parser = argparse.ArgumentParser(description="Jukebox Playlist Downloader") 
parser.add_argument("playlist_Name", help="Enter the name of the shared Playlist") 

download_url = "https://channeli.in/songsmedia/download/songs/english/" 
playlist_url = "https://channeli.in/jukebox/playlists_public/" 
user_url = "https://channeli.in/jukebox/playlists/" 

#playlist_name = raw_input('Enter playlist name: ') 
args = parser.parse_args() 
playlist_name = args.playlist_Name 


js = urllib2.urlopen(playlist_url) 
js_load = json.load(js) 

id = '' 
#pn = "u'"+playlist_name+"'" 
#print pn 
for l in js_load: 
    ##print l['name'] 
    if(l['name']==playlist_name): 
     id = l['id'] 

if(id==''): 
    print "Sorry, playlist not found" 
    ##return 

playlist = urllib2.urlopen(user_url+str(id)) 
playlist = json.load(playlist) 
songs_list = playlist['songs_list'] 

location = "Downloads/Jukebox/"+playlist_name+"/" 
if not os.path.exists(location): 
    os.makedirs(location) 

for song in songs_list: 
    file_name = songs_list[song]['file_name'] 
    url_file_name = file_name.replace(' ','%20') 
    song_download = urllib2.urlopen(download_url+url_file_name) 
    name = file_name.split('/')[-1] 
    if not os.path.exists(location+name): 
     local_file = open(location+name,'w') 
     local_file.write(song_download.read()) 
     local_file.close() 
    print "Downloaded Song: "+name 

回答

0

你需要以二進制方式打開文件。嘗試在mode參數指定「B」,以open()

local_file = open(location+name, 'wb') 

不是你的問題的原因,但你也應該使用os.path.join()構建路徑:

import os.path 
location = os.path.join('Downloads', 'Jukebox', playlist_name) 
. 
. 
. 
local_file = open(os.path.join(location, name, 'wb') 
相關問題