SlayerWeightCalculator/api/query_csv.py

78 lines
2.2 KiB
Python

import csv
import json
from collections import OrderedDict
MASTERS_JSON = 'masters.json'
MASTERS_KEY = 'masters'
MONSTERS_CSV = 'monsters.csv'
RESULT_SUFFIX = '_results'
NEW_COLUMN = 'id'
JOIN_INDEX = 0
def loop_over_masters():
masters_file = open(MASTERS_JSON)
data = json.load(masters_file)[MASTERS_KEY]
masters_file.close()
for (key, value) in data.items():
current_master = str(value['name'].lower())
write_results(current_master)
generate_json(current_master)
replace_masters()
def write_results(current_master):
with open(MONSTERS_CSV, 'r') as monsters:
master_indices = dict((r[1], i) for i, r in enumerate(csv.reader(monsters)))
with open(current_master + '.csv', 'r') as master:
with open(current_master + RESULT_SUFFIX + '.csv', 'w') as results:
reader = csv.reader(master)
writer = csv.writer(results)
# New column with old header
writer.writerow([NEW_COLUMN] + next(reader, []))
for row in reader:
# row is found in slayer master AND monsters
index = master_indices.get(row[JOIN_INDEX])
if index is not None:
# Row with value for id and slayer_weight:
# 0,12\n
writer.writerow([index - 1] + row)
def generate_json(file_name):
data = []
with open(file_name + RESULT_SUFFIX + '.csv', 'r') as csv_file:
csv_reader = csv.DictReader(csv_file)
for rows in csv_reader:
id = rows['id']
data.append(rows)
with open(file_name + RESULT_SUFFIX + '.json', 'w') as json_file:
json_file.write(json.dumps(data, indent=4))
return json_file
def replace_masters():
masters_file = open(MASTERS_JSON)
master_data = json.load(masters_file)[MASTERS_KEY]
masters_file.close()
for item in master_data.items():
cur_master_file = open(item[1]['name'].lower()+'_results.json')
cur_data = json.load(cur_master_file)
cur_master_file.close()
item[1]['assignments'] = cur_data
with open(MASTERS_JSON + '_new' + '.json', 'w') as json_file:
json_file.write(json.dumps(master_data, indent=4))
if __name__ == "__main__":
loop_over_masters()