Skip to content

Instantly share code, notes, and snippets.

@mchlmicy
Last active April 3, 2016 23:40
Show Gist options
  • Save mchlmicy/ab639f71b06d5168142e4c6ce9c07682 to your computer and use it in GitHub Desktop.
Save mchlmicy/ab639f71b06d5168142e4c6ce9c07682 to your computer and use it in GitHub Desktop.
Compare multiple music library dirs, return differences
# utils
import os
# go to directory
os.chdir('//Volumes/NO NAME/Computer Files/iTunes Library/')
# loop through directory
primary_tracks, additional_tracks = {}, {}
def main():
for dir_index, dir in enumerate(os.listdir('.')):
os.chdir(dir)
# build lookups
if dir_index == 0:
print 'PRIMARY DIRECTORY: ' + dir
else:
additional_tracks.update({dir: {}})
# loop artists
for artist in os.listdir('.'):
os.chdir(artist)
# loop albums
for album in os.listdir('.'):
try:
os.chdir(album)
except OSError:
# artist does not have album, only tracks
utility_compare_tracks(dir, dir_index, artist, album)
else:
# compare primary tracks dict to each dir
for track in os.listdir('.'):
utility_compare_tracks(dir, dir_index, artist, track, album)
os.chdir('..')
os.chdir('..')
os.chdir('..')
print 'ADDITIONAL TRACKS:', additional_tracks
#print 'PRIMARY TRACKS:', primary_tracks
# utility functions
def utility_compare_tracks(dir, dir_index, artist, track, album=None):
if dir_index == 0:
# build primary tracks dict
try:
primary_tracks[artist][album]
except KeyError:
try:
primary_tracks[artist].update({album: []})
except KeyError:
primary_tracks.update({artist: {album: []}})
try:
if not track in primary_tracks[artist][album]:
if dir_index == 0:
primary_tracks[artist][album].append(track)
else:
utility_record_additional_tracks(dir, artist, album, track)
except KeyError:
utility_record_additional_tracks(dir, artist, album, track)
def utility_record_additional_tracks(dir, artist, album, track):
try:
additional_tracks[dir][artist][album].append(track)
except KeyError:
try:
additional_tracks[dir][artist].update({album: [track]})
except KeyError:
additional_tracks[dir].update({artist: {album: [track]}})
# run script
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment