All pastes #790267 Raw Edit

pyslob

public python v1 · immutable
#790267 ·published 2007-11-20 06:46 UTC
rendered paste body
#!/usr/bin/python -OOimport os.pathimport sysimport mutagen.easyid3import mutagen.id3import mutagen.mp4import mutagen.flacif len(sys.argv) < 3:    print 'USAGE: %s [root source dir] [destination dir]' % sys.argv[0]    raise SystemExitsrc, dest = sys.argv[1:]if not os.path.exists(src):    print 'ERROR: Source dir %s does not exist.' % src    raise SystemExitif not os.path.exists(dest):    print 'Creating destination dir `%s`.' % dest    os.makedirs(dest)def flac(fname):    info = dict(mutagen.flac.Open(fname))    info['tracknumber'] = int(info.get('tracknumber', ['0/0'])[0].split('/')[0])    return infodef mp3(fname):    info = dict(mutagen.easyid3.Open(fname))    info['tracknumber'] = int(info.get('tracknumber', ['0/0'])[0].split('/')[0])    return infodef m4a(fname):    info = dict(mutagen.mp4.Open(fname))    info = { 'tracknumber': info.get('trkn', [(0,0)])[0][0],                'title': info.get(r'\xa9nam', 'Unknown Title'),                'artist': info.get(r'\xa9ART', 'Unknown Artist'),                'album': info.get(r'\xa9alb', 'Unknown Album')                }    return infohandlers = {                    'flac': flac,                    'mp3': mp3,                    'm4a': m4a,                    'm4p': m4a                    }for root,dirs,files in os.walk(src):    for file in files:        fullpath = os.path.join(root, file)        ext = file.split('.')[-1]        try:            tags = handlers.get(ext, lambda x:'')(fullpath)            if tags != '':                val = lambda x,y : tags.get(x, [y])[0].strip()                artist =  val('artist', 'Unknown Artist')                album = val('album', 'Unknown Album')                title = val('title', 'Unknown Track')                tracknumber = '%.2d' % tags.get('tracknumber', 0)                #title() Capitalizes Strings Like This                artist = artist.title()                album = album.title()                dir = os.path.join(dest, artist, album)                if not os.path.exists(dir):                    os.makedirs(dir)                endfile = os.path.join(dir, '%s - %s.%s' % (tracknumber, title.replace('/',''), ext))                if not os.path.exists(endfile):                    try:                        os.popen(u'ln "%s" "%s"' % (fullpath, endfile))                    except:                        print fullpath, endfile, ':('        except mutagen.id3.ID3NoHeaderError, KeyError:        #error loading tags           pass