Запись всех значений словаря и запись их в файлы

Всем привет.

Я пишу техническую документацию и использую в md файлах переменные, которые передаются из gitlab.ci. У нас есть системные требования для кучи платформ, которые пишутся разработчиками в отдельном репозитории и помещаются в toml-файл со следующей структурой:

title = "example"

[key1header]
key1= "Clang 1.0"

[key2header]
key1= "android"
key2= "16"
key3= "c++"

мне нужно обновить свои значения переменных из gitlab.ci на эти. я могу это сделать с помощью команды export KEY1HEADER_KEY1_GIT=cat key1header_key1.txt, где в txt должно лежать нужное значение

вот этот toml файл можно преобразовать в словарь с помощью библиотеки tomli, словарь будет иметь следующий вид:

{'title': 'example', 'key1_header': {'key1': 'Clang 1.0'}, 'key2_header': {'key1': 'android', 'key2': '16', 'key3': 'c++'}}

по этому словарю я как раз и могу создать следующие файлы:

  • key1header_key1.txt, в котором будет содержаться значение Clang 1.0
  • key2header_key1.txt, в котором будет содержаться значение android
  • и т.д.

я понимаю как сделать это для конкретных ключей и значений:

import tomli

toml_path = "req.toml"
key1header_key1_path = "key1header_key1.txt"

with open(toml_path, "rb") as f:
    toml_dict = tomli.load(f)

with open(toml_path) as source, open(key1header_key1_path, 'w+') as destination_key1header_key1:
    www = source.read()
    for string in www.split('\n'):
        key1header_key1= toml_dict.get("key1header").get("key1")
    if key1header_key1:
        destination_key1header_key1.write(key1header_key1)

но вот столько строк только для 1го ключа и значения, а их обычно 5-6 и вот таких словарей у меня штук 30, у которых разные ключи

я бы хотел как-то оптимизировать программу, чтобы значения всех ключей записывались в отдельные файлы и имели бы название типа ключ1заголовок_ключ1.txt, а я потом бы брал значения из файлов для обновления переменных из gitlab.ci на те, которые указаны в файле


Ответы (1 шт):

Автор решения: n1tr0xs
  1. Перебираем ключи словаря
  2. Для каждого ключа перебираем вложенные ключи
  3. Пишем значение в файл
data = {'title': 'example', 'key1_header': {'key1': 'Clang 1.0'}, 'key2_header': {'key1': 'android', 'key2': '16', 'key3': 'c++'}}

for key, val in data.items():
    if key=='title':
        continue
    for v in val:
        with open(key+v+'.txt', 'w') as fout:
            fout.write(val[v])
→ Ссылка