У меня есть код, который использует JSON-файл в качестве входа - каждая запись в файле JSON является уникальной конфигурацией для запуска моделирования. Ниже приведен упрощенный пример одной строки (расширенной) файла JSON. Вы можете иметь тысячи этих строк с разными уникальными значениями.Массовое создание файлов конфигурации JSON
{
"1": {
"description": "unique configuration 1",
"attribute to change": 1750,
"object type 1": {
"object name": {
"number": 10,
"object attribute 1": 5
}
},
"object type 2": {
"object name": {
"number": 5,
"object attribute 1": 50
}
}
}
}
Это хорошо работает. Однако всякий раз, когда я хочу внести изменения в конфигурационные файлы, мне нужно сделать это вручную, что, если у вас тысячи записей, может быть утомительным. Я хочу иметь возможность загружать структуру JSON по умолчанию (которая выше) и автоматически создавать необходимые изменения.
Я создал приведенный ниже код, который находится почти там.
def generate_config_file(input_data, attribute, new_value):
for key, value in input_data.items():
if isinstance(value, dict):
if attribute in value:
value[attribute] = new_value
else:
generate_config_file(value, attribute, new_value)
elif key == attribute:
input_data[attribute] = new_value
file_name = input('Enter file name: ')
if len(file_name) < 1:
file_name = 'default structure.JSON'
id_num = 1
out_file = open('new config file.JSON', "a")
# so here create a new file with multiple rows
# where "attribute to change" is the attribute modified
# here between 5 and 95 in steps of 5
for i in range(5, 100, 5):
with open(file_name) as data_file:
data = json.load(data_file)
# give the new row a unique id_num
data[str(id_num)] = data.pop('1')
generate_config_file(data[str(id_num)], 'attribute to change', i)
json.dump(data, out_file, sort_keys=True, indent=4)
id_num += 1
out_file.close()
Я хотел бы, чтобы результат выглядел ниже (за исключением того, что у вас будет 19 строк). Я упал на верхний уровень, но внутри каждой строки (1,2,3 .... 19) структура должна соответствовать приведенному выше значению. Единственное различие между строками - это значение, связанное с изменяемым атрибутом.
{
"1": {},
"2": {},
"3": {}
}
Однако она производит:
{
"1": {}
}{
"2": {}
}{
"3": {}
}
Я пробовал различные вещи. Например, преобразование вывода в строку и попытка вырезать дополнительные {} и заменить на. Я также пробовал при сбросе каждого раздела вывода o удалить внешний {} и заменить. Ни работали, и я теперь не уверен, что попробовать.
Любая помощь приветствуется.