Source code for emodpy_hiv.countries.converting.reformat_json
import os
import json
from typing import Union
from pathlib import Path
[docs]def format_sort_round_json(current_filename: Union[str, Path],
new_filename: Union[str, Path]):
"""
A function that takes a JSON file and reformats it to be sorted and rounded to 9 digits.
This is helpful when comparing the new and old models. The function will create a new file.
Args:
current_filename (str or Path):
The name of the JSON file to be converted.
new_filename (str or Path):
The name of the new JSON file to be created.
"""
if os.path.exists(new_filename):
ValueError(f"File {new_filename} already exists. Please delete it before running this function.")
if not os.path.exists(current_filename):
raise ValueError(f"File {current_filename} does not exist. Please check the file path.")
tmp_json = None
with open(current_filename, 'r') as file:
tmp_json = json.load(file)
with open(new_filename, "w") as file:
# This process of writing and reading and writing allows us to write a file where
# the floating point values are rounded to 9 digits. This helps us not have rounding
# issues between different platforms.
tmp_json = json.dumps(tmp_json, indent=4, sort_keys=True)
tmp_json = json.loads(tmp_json, parse_float=lambda x: round(float(x), 9))
json.dump(tmp_json, file, indent=4, sort_keys=True)
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('current_filename', type=str, default=None, help='The name of the JSON file to be converted.')
parser.add_argument('new_filename', type=str, default=None, help='The name of the new JSON file to be created.')
args = parser.parse_args()
format_sort_round_json(args.current_filename, args.new_filename)