Como definir: campos "artista", "artista do álbum", "ano", "álbum", "número da música" e "título" da tag, com mutagênico

Eu estou tentando usar mutagen (com Python 2.7.5) para criar um programa que, dado que o caminho para as músicas é...\Artist\Year Album\Songnumber Title.mp3, define o artista, o artista do álbum, o ano, o álbum, o número da música e as tags de título da música e preserva a tag do gênero. Eu tentei fazer isso comEasyID3, mas não tem a tag de artista do álbum. Eu também tentei fazer isso regularmenteID3, mas eu tive alguns problemas com isso. Aqui está o código que usei:

from mutagen.id3 import ID3, TIT2, TPE2, TALB, TPE1, TYER, TDAT, TRCK, TCON, TORY, TPUB
p = "E:\\Musik\\Aeon\\2005 Bleeding the False\\01 Cenobites - Copy.mp3"
audio = ID3(p)
audio.add(TIT2(encoding=3, text=u"t"))    #TITLE
audio.add(TRCK(encoding=3, text=u"1"))    #TRACK
audio.add(TPE1(encoding=3, text=u"a"))    #ARTIST
audio.add(TALB(encoding=3, text=u"al"))   #ALBUM
audio.add(TYER(encoding=3, text=u"2000")) #YEAR
audio.add(TDAT(encoding=3, text=u"2001")) #YEAR
audio.add(TORY(encoding=3, text=u"2002")) #ORIGYEAR
audio.add(TPE2(encoding=3, text=u"aa"))   #ALBUMARTIST
audio.add(TCON(encoding=3, text=u"g"))    #GENRE
audio.save()

eu useiessa mesa para encontrar os códigos de 4 letras para cada tag.

Título, faixa, artista e álbum, tudo funcionou bem. Para todos os campos sob as propriedades do arquivo mp3> detalhes, exceto esses quatro e "ano", os valores anteriores foram apagados porsave()e quando tentei adicionar novos, nada aconteceu. Em particular, os campos "genre" e "album artist" não funcionaram. Quanto ao "ano", que tem os dois códigos, TYER e TDAT, não mudaria nada, a menos que o campo estivesse vazio primeiro, e somente por TYER. "ORIGYEAR" com o código TORY não fez nada.

O campo "gênero" não está completamente quebrado - se você o alterar com código python (audio.add(etc)), ou vá manualmente para propriedades> detalhes de antemão,save() irá limpar os gêneros não integrados, como "Technical Death Metal" ou "mt3jr39kf390", enquanto trabalha com gêneros internos como "Classic Rock" ou "Country", enquanto certos inteiros como 1 ou 2 se transformam naqueles gêneros internos. (O campo ano ocasionalmente se comporta de maneira semelhante também - se você definir manualmente o valor do campo para determinados números,save() irá mudá-lo para um número diferente. Eu só observei isso para valores abaixo de 800, mas não para todos - 448 e 449 permanecem inalterados, enquanto 500 se transformam em 320, 700 se transformam em 448, 12 se transformam em 10 e 10 se transformam em 8. Se você mudar de 12 para 10 desta forma e, em seguida, executar o programa novamente, nada vai acontecer, mas se você alterá-lo manualmente para algum outro valor e volta para 10, ele vai se transformar em 8.)

Então, o problema é que eu não posso mudar o tag do ano se já existe algo lá, eu não posso mudar o artista do álbum ou tag de gênero, e eu não sei como fazer o comando "get" se houver mesmo um para que eu possa preservar a tag de gênero.

Além disso,EasyID3 tem os mesmos problemas -save() limpa certos campos e comporta-se estranhamente com gênero e ano. A única diferença parece ser que é possível alterar o ano mesmo que o campo não esteja vazio. Aqui está o código que usei:

from mutagen.easyid3 import EasyID3
p = "E:\\Musik\\Aeon\\2005 Bleeding the False\\01 Cenobites - Copy.mp3"
audio = EasyID3(p)
audio["title"] = u"t"
audio["artist"] = u"a"
audio["album"] = "al"
audio["date"] = u"2000"
audio["tracknumber"] = u"1"
audio["genre"] = u"g"
audio.save()
print '\n'.join(EasyID3.valid_keys.keys())

questionAnswers(2)

yourAnswerToTheQuestion