私のプロジェクトでは、mutagen ライブラリを使用して、5000 以上の mp3 ファイルから ID3 タグを読み取ります。それらを読んだ後、それらを使用して次のオブジェクトを構築します。
class Track:
def __init__(self, artist, title, album=None):
self.artist = artist
self.title = title
self.album = None
def __str__(self):
return "Track: %s : %s" % (self.artist,self.title, )
def set_album(self,album):
self.album = album
class Album:
def __init__(self, artist, title, year='', genre='', tracks=None):
self.artist = artist
self.year = year
self.genre = genre
self.title = title
self.tracks = []
def __str__(self):
return "Album: %s : %s [%d]" % (self.artist,self.title,len(self.tracks))
def add_track(self,track):
self.tracks.append(track)
問題は、一部のファイルに必要なタグが欠落している (タイトルが欠落している、アーティストが欠落している、またはその両方) ため、KeyValueError が発生することです。
#'TALB' (album title), 'TIT2' (track title), 'TPE1' (artist), 'TDRC' (year), and 'TCON' (genre)
for root, dirs, files in os.walk(dir):
for filename in files:
if filename.lower().endswith(e):
fullname = os.path.join(root, filename)
try:
audio = mutagen.File(fullname)
track = Track(audio['TPE1'],audio['TIT2'])
album = Album(audio['TPE1'], audio['TALB'], audio['TDRC'], audio['TCON'])
excpet Exception as e:
print "Error on %s. %s " % (filename,type(e).__name__)
これは、すべてのタグを持つすべてのファイルをロードしますが、これでは十分ではありません。ifs を使用してこの問題を解決しました。問題なく動作し、十分に高速です。しかし、これを処理するより良い方法があるかどうか疑問に思います。