Python: создание файла на основе массива строк

0

Я пытаюсь написать программу, которая пойдет на сайт и загрузит все песни, которые они опубликовали. Сейчас у меня возникли проблемы с созданием новых имен файлов для каждой из загружаемых песен. Сначала я получил все имена файлов и местоположения песен (html). Однако, когда я пытаюсь создать новые файлы для песен, которые будут вставлены, я получаю сообщение об ошибке:

IOError: [Errno 22] неверный режим ('w') или имя файла

Я попытался использовать различные режимы, такие как "w+", "a" и "CN11", чтобы увидеть, разрешат ли они проблему, но до сих пор я продолжаю получать сообщение об ошибке. Я также попробовал "% name" -ing строку, но это тоже не сработало. Мой код следующий, любая помощь будет оценена.

import urllib
import urllib2

def earmilk():
    SongList = []
    SongStrings = []
    SongNames = []
    earmilk = urllib.urlopen("http://www.earmilk.com/category/pop")
    reader = earmilk.read()
    #gets the position of the playlist
    PlaylistPos = reader.find("var newPlaylistTracks = ")
    #finds the number of songs in the playlist
    NumberSongs = reader[reader.find("var newPlaylistIds = " ): PlaylistPos].count(",") + 1
    initPos = PlaylistPos

    #goes though the playlist and records the html address and name of the song

    for song in range(0, NumberSongs):
        songPos = reader[initPos:].find("http:") + initPos
        namePos = reader[songPos:].find("name") + songPos
        namePos += reader[namePos:].find(">")
        nameEndPos = reader[namePos:].find("<") + namePos
        SongStrings.append(reader[songPos: reader[songPos:].find('"') + songPos])
        SongNames.append(reader[namePos + 1: nameEndPos])
        #initPos += len(SongStrings[song])
        initPos = nameEndPos

    for correction in range(0, NumberSongs):
        SongStrings[correction] = SongStrings[correction].replace('\\/', "/")

    #downloading songs

    #for download in range(0, NumberSongs):
    #print reader.find("So F*")
    #x= SongNames[0]
    songDL = open(SongNames[0].formant(name), "w+")
    songDL.write(urllib.urlretrieve(SongStrings[0], SongNames[0] + ".mp3"))
    songDL.close()


    print SongStrings
    for name in range(0, NumberSongs):
        print SongNames[name] + "\n"
    earmilk.close()
  • 0
    Попробуйте print SongNames[0].formant(name) , прежде чем open
Теги:
music
download

1 ответ

0

Вам нужно использовать filename = '%s' % (SongNames[0],) для создания имени, но вы также должны убедиться, что ваше имя файла является допустимым - я не знаю ни одной песни, названной *.* но я бы не хотел, чтобы это случилось так:

filename = ''.join([a.isalnum() and a or '_' for a in SongNames[0]])

Ещё вопросы

Сообщество Overcoder
Наверх
Меню