import os import random import shutil import argparse def get_dir_size(path): total = 0 with os.scandir(path) as it: for entry in it: if entry.is_file(): total += entry.stat().st_size elif entry.is_dir(): total += get_dir_size(entry.path) return total def main(): parser = argparse.ArgumentParser() parser.add_argument("--library") parser.add_argument("--playerStorage") parser.add_argument("--maxBytes") args = parser.parse_args() library = args["library"] player = args["playerStorage"] amount = int(args["maxBytes"]) libraryArtists = os.listdir(library) playerArtists = os.listdir(player) librarySpace = {} for item in libraryArtists: librarySpace[item] = get_dir_size(library+"/"+item) shutil.rmtree(player) os.mkdir(player) cumulativeTotal = 0 chosenArtists = [] while True: artist = random.choice(libraryArtists) libraryArtists.remove(artist) if artist in playerArtists: continue if cumulativeTotal + librarySpace[artist] >= amount: break cumulativeTotal += librarySpace[artist] shutil.copytree(library+"/"+artist, player+"/"+artist) chosenArtists.append(artist) print(100 * cumulativeTotal / amount) if __name__ == "__main__": main()