Skip to content

Instantly share code, notes, and snippets.

@mjgiarlo
Created June 6, 2010 00:19
Show Gist options
  • Save mjgiarlo/427128 to your computer and use it in GitHub Desktop.
Save mjgiarlo/427128 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
import os
import sys
from lxml import etree
from operator import itemgetter
metadata_dir = '.metadata'
def is_album_dir(d):
return len([f for f in os.listdir(d) if f[-4:] == ".mp3"])
def sort_by_values(d):
return sorted(d.iteritems(), key=itemgetter(1))
def usage():
print >> sys.stderr, "Usage: %s ALBUM_PATH" % sys.argv[0]
sys.exit(1)
if __name__ == '__main__':
if len(sys.argv) != 2:
usage()
album_dir = sys.argv[1]
if not os.path.isdir(album_dir) or \
not os.path.isdir(os.path.join(album_dir, metadata_dir)) or \
not is_album_dir(album_dir):
usage()
trackmap = dict.fromkeys([f for f in os.listdir(album_dir) if f != metadata_dir])
for track in trackmap:
mdfile = os.path.join(album_dir, metadata_dir, track.replace('.mp3', '.xml'))
doc = etree.parse(mdfile, etree.XMLParser(recover=True))
try:
trackmap[track] = int(doc.find('originalTrackNumber').text)
except AttributeError:
trackmap[track] = 1
ordered_tracks = [os.path.join(album_dir, t) for (t, i) in sort_by_values(trackmap)]
print "\n".join(ordered_tracks)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment