generate_card_ratings.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import csv
  2. import json
  3. import os
  4. def discover_sets():
  5. # find all set directories
  6. sets = []
  7. for root, dirs, files in os.walk("sets"):
  8. for dir in dirs:
  9. sets.append(dir)
  10. return sets
  11. def find_card(all_card_data, name):
  12. for card in all_card_data:
  13. if card["name"] == name:
  14. return card
  15. return None
  16. def find_card_with_dual_faces(all_card_data, name):
  17. for card in all_card_data:
  18. parts = [p.strip() for p in card["name"].split("//")]
  19. if name in parts:
  20. return card
  21. return None
  22. def main():
  23. with open("cards/oracle-cards.json") as f:
  24. all_card_data = json.load(f)
  25. for set in discover_sets():
  26. ratings_csv = os.path.join("sets", set, "card-ratings-all.csv")
  27. ratings_json = os.path.join("sets", set, "card-ratings-all.json")
  28. card_data_json = os.path.join("sets", set, "card-data.json")
  29. with (open(ratings_csv) as f):
  30. lines = []
  31. cards = []
  32. for line in csv.DictReader(f):
  33. name = line["\ufeff\"Name\""]
  34. line["Name"] = name
  35. del line["\ufeff\"Name\""]
  36. lines.append(line)
  37. card_data = find_card(all_card_data, name)
  38. if card_data is None:
  39. card_data = find_card_with_dual_faces(all_card_data, name)
  40. if card_data is None:
  41. print(f"Could not find card data for {name}")
  42. continue
  43. cards.append(card_data)
  44. with open(ratings_json, "w") as f:
  45. json.dump(lines, f, indent=4)
  46. with open(card_data_json, "w") as f:
  47. json.dump(cards, f, indent=4)
  48. if __name__ == '__main__':
  49. main()