Python. Изменение yaml файла

Нужно поменять значение в yaml файле. Получился такой скрипт:

#!/usr/bin/env python

import yaml
import argparse

parser = argparse.ArgumentParser(description='Скрипт')
parser.add_argument('key', type=str, help='key')
parser.add_argument('value', type=str, help='value')
args = parser.parse_args()

with open("values.yaml") as f:
    try:
        list_doc = yaml.safe_load(f)
    except yaml.YAMLError as exc:
        print(exc)

item = list_doc
for key in args.key.split('.')[:-1]:
    item = item[key]
    
item[args.key.split('.')[-1]] = args.value
        
with open("values.yaml", "w") as f:
    try:
        yaml.safe_dump(list_doc, f)
    except yaml.YAMLError as exc:
        print(exc)

Все работает, но есть проблема, при записи ломаются мультистроковые значения.

input:

  extraFiles:
      jupyter_config.py:
        stringData: |
          c.NotebookApp.nbserver_extensions = {
              "jupyter_nbextensions_configurator": True,
              "ipyparallel.nbextension": True,
              "jupyter_tensorboard": True,
              "jupyter_server_proxy": True
          }
          c.NotebookApp.terminals_enabled = False
        mountPath: /etc/jupyter/jupyter_config.py
      webserver_config.py:
        stringData: |
          # -*- coding: utf-8 -*-
          import os
          from flask_appbuilder.security.manager import AUTH_LDAP
          from flask_appbuilder.security.manager import AUTH_REMOTE_USER

output:

  extraFiles:
    jupyter_config.py:
      mountPath: /etc/jupyter/jupyter_config.py
      stringData: "c.NotebookApp.nbserver_extensions = {\n    \"jupyter_nbextensions_configurator\"\
        : True,\n    \"ipyparallel.nbextension\": True,\n    \"jupyter_tensorboard\"\
        : True,\n    \"jupyter_server_proxy\": True\n}\nc.NotebookApp.terminals_enabled\
        \ = False\n"
    webserver_config.py:
      mountPath: /opt/bitnami/airflow/webserver_config.py
      stringData: '# -*- coding: utf-8 -*-

        import os

        from flask_appbuilder.security.manager import AUTH_LDAP

        from flask_appbuilder.security.manager import AUTH_REMOTE_USER

Что можно сделать, что бы не ломалось форматирование?


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