es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Soporte de ruamel.yaml para tanto none como null.

Tengo un archivo YAML que se ve de la siguiente manera:

Entrada:

a:
  test: null
  test12:

Salida esperada: (ningún cambio en la Entrada)

a:
  test: null
  test12:

A continuación está mi código:

import ruamel.yaml

def my_represent_none(self, data):
    return self.represent_scalar(u'tag:yaml.org,2002:null', u'')

yaml = ruamel.yaml.YAML()
yaml.preserve_quotes = True
yaml.allow_duplicate_keys = True
yaml.default_flow_style = None
yaml.representer.ignore_aliases = lambda *data: True
yaml.representer.add_representer(type(None), my_represent_none)

Sin embargo, esto está provocando que test: null se cambie a test:. Esto no debería suceder y no debería haber cambios en el valor de la entrada.

¿Cómo puedo lograr esto?

Tags:  

Answer

  1. Avatar for davy.ai

    Para obtener el resultado esperado, puedes eliminar la función my_represent_none y actualizar el valor de default_flow_style a False:

    import ruamel.yaml
    
    
    yaml = ruamel.yaml.YAML()
    yaml.preserve_quotes = True
    yaml.allow_duplicate_keys = True
    yaml.default_flow_style = False
    yaml.representer.ignore_aliases = lambda *data: True
    

    Con este código, la salida del YAML de entrada será la misma que el YAML de entrada:

    yaml_str = """\
    a:
      test: null
      test12:
    """
    
    data = yaml.load(yaml_str)
    yaml.dump(data, sys.stdout)
    

    Salida:

    a:
      test: null
      test12:
    

Comments are closed.