Music files come, music files go. And after some time your iTunes library is sprinkled with cases of
The song “Monsieur Cannibale” could not be used because the original file could not be found. Would you like to locate it?
Being annoyed by this and having no idea how "healthy" my library was,
I decided to delve in the corners of
After considering some approaches with XML parsing libraries, I stumbled
on this nice solution
which directly hooks into Mac OSX's frameworks with the
PyObjC, a Python-ObjC bridge.
Long story short, I hacked this little script together to scan through the tracks in my iTunes library and complain about local files it can't find:
import sys import os import Foundation def scan_itunes_library(library_file): # Load iTunes library db = Foundation.NSDictionary.dictionaryWithContentsOfFile_(library_file) # Check track info. for track in db[u'Tracks'].itervalues(): if u'Location' not in track: print 'No location info in track info', track continue # Resolve location nsurl = Foundation.NSURL.URLWithString_(track[u'Location']) # Check local file paths if nsurl.scheme() == u'file' and nsurl.host() == u'localhost': if not os.path.exists(nsurl.path()): print "Location does not exist:", nsurl.path(), 'from track', track else: print "Don't know how to check", nsurl if __name__ == '__main__': scan_itunes_library(library_file=sys.argv)
Run this script with the path to your iTunes Library XML file
~/Music/iTunes/iTunes Library.xml typically) as argument.