Как открыть несколько файлов Json и сохранить их в нескольких переменных

#python #json #python-3.x

Вопрос:

У меня есть несколько файлов Json. Соглашение об именовании файла таково dataset_ML-Model_params.json . Например, House_Lasso_params.json , House_RF_params.json , Bike_Lasso_params.json , и Bike_RF_params.json .

Все эти файлы содержатся tuning-hyperparameters в формате dict. Я могу открыть 1 файл, используя приведенный ниже код

 filename = f"{args.dataset}_Lasso_params.json"
    outfile = HT_OUT / filename
    with open(outfile, "r") as file:
        d_loaded = json.load(file)
 

Передача значения в модель.

 Lasso(**d_loaded, precompute=True)
 

Еще раз для другого файла

 filename = f"{args.dataset}_RF_params.json"
    outfile = HT_OUT / filename
    with open(outfile, "r") as file:
        rf_loaded = json.load(file)

RF(**rf_loaded)
 

Здесь args.dataset содержится dataset название. Не могли бы вы сказать мне, как я могу загрузить эти 2 файла и сохранить их в разных переменных. Чтобы позже я мог передать переменную в модель. Нравится

 # After opening and saving the json file in different variable
Lasso(**lasso_params, precompute=True)
RF(**rf_params)
 

Комментарии:

1. Почему бы просто не переместить код передачи параметров в значения после того, как вы прочитаете все файлы? Или вы ищете более универсальное решение, когда у вас много файлов?

2. Спасибо. Да, у меня много файлов. Итак, я хотел найти какой-нибудь питонический способ.

Ответ №1:

Составьте список всех моделей

 MODEL_NAMES = ["Lasso", "Ridge"]
 

Создайте еще один словарь, чтобы сохранить параметры для каждой модели

     models_params = {}
    for model_name in MODEL_NAMES:
        filename = f"{args.dataset}_{model_name}_params.json"
        outfile = HT_OUT / filename
        with open(outfile, "r") as file:
            d_loaded = json.load(file)
            models_params[model_name] = d_loaded
 

Позже используйте get(key) для доступа к ожидаемым параметрам.

 Lasso(**(models_params.get('Lasso')), precompute=True)
RF(**(models_params.get('RF')))
 

Вы также можете проверить параметры

 print(Lasso(**(models_params.get('Lasso')), precompute=True).get_params())
 

Ответ №2:

Вы могли бы использовать другой диктант, который будет содержать нужные вам параметры. Например,

 model_params = {'lasso_params': smth_here, 'rf_params': smth_here}
 

Таким образом, вы можете получить необходимую ценность,

 *model_params['lasso_params']
 

Чтобы получить все файлы с помощью этого подстановочного знака (dataset_ML-Model_params.json.) вы можете использовать библиотеку под названием glob:

 from glob import glob

glob('*_params.json') # return ['lasso_params', 'rf_params', ...]
 

А затем просто прочитайте их один за другим.