O título é só uma piada, aqui você não vai organizar nada, isso foi apenas um exercício bobo de coding. O Tiago Madeira fez seu blog renascer das cinzas com um script em Ruby que preenche as tags de arquivos MP3 baseando-se no nome do arquivo. Eu achei legal e como estou querendo aprender Python resolvi fazer parecido com essa linguagem.
O resultado é o script abaixo que não faz exatamente a mesma coisa que o dele. Pelo que eu entendi do código Ruby o script do Tiago entra nos subdiretórios e sai acertando as tags de arquivos com o padrão de nome "Faixa - Titulo.mp3". O meu fica no diretório corrente e acerta as tags de arquivos no padrão "Artista - Album - Faixa - Titulo.mp3". O script é burro e espera esse padrão de nome de arquivo, se não for esse ele vai fazer besteira.
Programadores Python, pelo amor de Deus, não me matem! Eu não tenho experiência alguma com a linguagem e com certeza absoluta isso ai pode ser feito de maneira muito mais elegante, muito mais Python. Simplesmente fui na documentação da linguagem e usei as primeiras coisas que eu encontrei pra ler diretórios e executar expressões regulares. Qualquer sugestão de melhoria é bem vinda e acatada com carinho pelo wannabe programmer aqui.
Para executar o código você deve ter o interpretador Python (duh!) e a TagLib para Python, que é TagPy. No ubuntu um apt-get install python-tagpy
resolve tudo.
#!/usr/bin/env python
import os, re, tagpy
conteudo = os.listdir(os.getcwd())
for i in conteudo:
if os.path.isfile(i) and re.search('mp3$', i) is not None:
arquivo = tagpy.FileRef(i)
tag = arquivo.tag()
nome_do_arquivo = i.split(".")
nome_do_arquivo = nome_do_arquivo[0].split(" - ")
tag.artist = nome_do_arquivo[0]
tag.album = nome_do_arquivo[1]
tag.track = int(nome_do_arquivo[2])
tag.title = nome_do_arquivo[3]
arquivo.save()
[update] Vivendo e aprendendo, uma versão um pouco mais enxuta do script. A biblioteca padrão do Python é bem extensa e ainda não conheço muito dela. A dica do modulo glob eu achei lendo um script qualquer na net.
import os, glob, tagpy
for file in glob.glob("*.mp3"):
nome, extensao = os.path.splitext(file)
nome = nome.split(" - ")
arquivo = tagpy.FileRef(file)
tag = arquivo.tag()
tag.artist = nome[0]
tag.album = nome[1]
tag.track = int(nome[2])
tag.title = nome[3]
arquivo.save()