Organizando tags MP3 com Python e taglib

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.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/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.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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()
[, , , ]

Comentários