import json import os import cube_json import word_count def get_keywords(card): if 'keywords' in card.keys(): return card['keywords'] elif 'card_faces' in card: keywords = [] for face in card['card_faces']: if 'keywords' in face: keywords += face['keywords'] return keywords else: return [] def keyword_count(filename): # json file must contain a list of Scryfall card objects f = open(filename, encoding='utf8') d = json.load(f) keywords = [] for card in d: keywords += get_keywords(card) f.close() k_unique = set(keywords) k_dict = {} for keyword in k_unique: k_dict[keyword] = keywords.count(keyword) return k_dict def keyword_report(k_dict): k_lists = [] for keyword in k_dict: k_lists += [[k_dict[keyword], keyword]] k_lists = sorted(k_lists, reverse=True) for n, keyword in k_lists: print(keyword, n) print(f'\nTotal unique keywords: {len(k_dict)}') if __name__ == '__main__': ### Example use: print a keyword report for a cards.json file ### # cube_list = cube_json.load_cube_from_csv('cube_csvs/TheElegantCube_2020-11-17_5.0.4.csv', {'core'}) # cube_json_filename = cube_json.create_cube_json(cube_list, 'cubes/TheElegantCube_2020-11-17_5.0.4.json') # keyword_dict = keyword_count(cube_json_filename) # keyword_report(keyword_dict) # ### Example use: count keywords in a list of cube.json files ### # output = open('cube_keyword_frequency.csv', 'w+') # all_cube_files = os.listdir('cubes') # output_file = open('cube_keyword_frequency.csv', 'w+') # output_file.write('Cube,Keywords\n') # for filename in all_cube_files: # if filename.endswith('json'): # k_dict = keyword_count('cubes/' + filename) # output_file.write(f"{filename.strip('json')},{len(k_dict)}\n") # print(filename, len(k_dict)) # output_file.close() # ### Example use: find keyword count in each set ### # f = open('set_codes.txt') # codes = [line.strip() for line in f.readlines()] # output_file = open('set_keyword_frequency.csv', 'w+') # output_file.write('Set,Keywords\n') # for code in codes: # if code == 'CON': # code = 'CON_' # filename = f'scryfall/sets/{code}.json' # k_dict = keyword_count(filename) # print(f'{code}: {len(k_dict)}') # output_file.write(f'{code},{len(k_dict)}\n') # output_file.close() # f.close() pass