Organizando tags MP3 com Python e taglib 29/11/07
O título é só uma piada, aqui você não vai organizar nada, isso foi apenas um exercício bobo de programação. 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()
Python é uma linguagem legal pra caramba, legal sua resposta ao post.
Sabe que eu comecei recentemente a aprender Ruby e no início também fiquei em dúvida sobre começar Python ou Ruby. Resolvi por Ruby simplesmente porque achei o código mais bonitinho
E acho que foi uma ótima escolha, porque estou me divertindo muito aprendendo. É muito massa não usar WHILE e FOR, programar com tudo orientado a objetos (inclusive números e caracteres são objetos!), modificar funções e classes básicas do sistema… vale a pena. Nessas linguagens de hoje em dia é muito mais fácil fazer essas coisas simples que antes fazíamos em shell… hehe
Comentário por Tiago Madeira, em November 29, 2007, às 10:34 pm. #.