Last active
April 3, 2016 23:40
-
-
Save mchlmicy/ab639f71b06d5168142e4c6ce9c07682 to your computer and use it in GitHub Desktop.
Compare multiple music library dirs, return differences
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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