#!/usr/bin/env python3 # sortashuffle.py # Shuffles shows but keeps episodes in order. # USAGE # 1. Modify the TARGET variable below # 2. Modify the SOURCES variable below # 3. Run the script as administrator import os import random # Playlist destination folder TARGET = "" # Shows to include # MUST be in format "C://Dir1//Dir2" SOURCES = ["", ""] def get_episode_list(): """Get list of episodes for each show in SOURCES.""" SHOWLIST = [[f for f in os.listdir(source)] for source in SOURCES] def get_weight_list(): """Determine weights (# of episodes) so shows get spread evenly.""" WEIGHTLIST = [len(show) for show in SHOWLIST] def shuffle(): """Shuffle shows, randomly selected according to weight.""" SHUFFLED = [] while any(SHOWLIST): selection = random.choices(range(len(SHOWLIST)), weights=WEIGHTLIST, k=1)[0] SHUFFLED.append(SOURCES[selection] + "//" + SHOWLIST[selection].pop(0)) WEIGHTLIST[selection] = len(SHOWLIST[selection]) def deploy_symlinks(): """Deploy a symlink for each episode in the playlist.""" count = 0 for episode in SHUFFLED: os.symlink(episode, TARGET + str(count)) count += 1 def deploy_index(): """Deploy playlist index file.""" INDEX = open(TARGET + "//" + "_PLAYLIST_INDEX.txt", 'w') INDEX.write("\n".join(SHUFFLED)) INDEX.close() def main(): get_episode_list() get_weight_list() shuffle() deploy_symlinks() deploy_index() if __name__=="__main__": main()