#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', ...]
А затем просто прочитайте их один за другим.