library create python yaml

create - ¿Cómo puedo analizar un archivo YAML en Python?



python create yaml file (7)

Lee y escribe archivos YAML con Python 2 + 3 (y Unicode)

# -*- coding: utf-8 -*- import yaml import io # Define data data = {''a list'': [1, 42, 3.141, 1337, ''help'', u''€''], ''a string'': ''bla'', ''another dict'': {''foo'': ''bar'', ''key'': ''value'', ''the answer'': 42}} # Write YAML file with io.open(''data.yaml'', ''w'', encoding=''utf8'') as outfile: yaml.dump(data, outfile, default_flow_style=False, allow_unicode=True) # Read YAML file with open("data.yaml", ''r'') as stream: data_loaded = yaml.load(stream) print(data == data_loaded)

Archivo YAML creado

a list: - 1 - 42 - 3.141 - 1337 - help - € a string: bla another dict: foo: bar key: value the answer: 42

Finales de archivos comunes

.yml y .yaml

Alternativas

  • CSV: formato super simple ( lectura y escritura )
  • JSON: Agradable para escribir datos legibles por humanos; Muy de uso común ( lectura y escritura )
  • YAML: YAML es un superconjunto de JSON, pero más fácil de leer ( lectura y escritura , comparación de JSON y YAML )
  • pickle: un formato de serialización Python ( lectura y escritura )
  • MessagePack ( paquete de Python ): Representación más compacta ( lectura y escritura )
  • HDF5 ( paquete Python ): agradable para matrices ( lectura y escritura )
  • XML: existe también * suspiro * ( read y write )

Para su aplicación, lo siguiente podría ser importante:

  • Soporte por otros lenguajes de programación.
  • Rendimiento de lectura / escritura
  • Compacidad (tamaño del archivo)

Ver también: Comparación de formatos de serialización de datos.

Si está buscando una forma de crear archivos de configuración, le recomendamos que lea mi breve artículo Archivos de configuración en Python

¿Cómo puedo analizar un archivo YAML en Python?


El método más fácil y puro sin depender de los encabezados de C es PyYaml:

#!/usr/bin/env python import yaml with open("example.yaml", ''r'') as stream: try: print(yaml.load(stream)) except yaml.YAMLError as exc: print(exc)

Y eso es. Más información aquí:

http://pyyaml.org/wiki/PyYAMLDocumentation


Importe el módulo yaml y cargue el archivo en un diccionario llamado ''my_dict'':

import yaml my_dict = yaml.load(open(''filename''))

Eso es todo lo que necesitas. Ahora todo el archivo yaml está en el diccionario ''my_dict''.


Si tiene YAML que cumple con la especificación YAML 1.2 (lanzada en 2009), debe usar ruamel.yaml (exención de responsabilidad: soy el autor de ese paquete). Es esencialmente un superconjunto de PyYAML, que admite la mayor parte de YAML 1.1 (desde 2005).

Si desea poder conservar sus comentarios cuando realiza un viaje de ida y vuelta, debe utilizar ruamel.yaml.

Actualizar el ejemplo de @Jon es fácil:

import ruamel.yaml as yaml with open("example.yaml") as stream: try: print(yaml.safe_load(stream)) except yaml.YAMLError as exc: print(exc)

Use safe_load() menos que realmente tenga control total sobre la entrada, la necesite (rara vez es el caso) y sepa lo que está haciendo.

Si está usando pathlib Path para manipular archivos, es mejor usar la nueva API ruamel.yaml proporciona:

from ruamel.yaml import YAML from pathlib import Path path = Path(''example.yaml'') yaml = YAML(typ=''safe'') data = yaml.load(path)


Yo uso ruamel.yaml . Detalles y debate here .

from ruamel import yaml with open(filename, ''r'') as fp: read_data = yaml.load(fp)

El uso de ruamel.yaml es compatible (con algunos problemas solubles simples) con los usos antiguos de PyYAML y, como se indica en el enlace que proporcioné, use

from ruamel import yaml

en lugar de

import yaml

y solucionará la mayoría de tus problemas.

EDITAR : PyYAML no está muerto, pero se mantiene en un lugar diferente.


Ejemplo:

defaults.yaml

url: https://www.google.com

environment.py

from ruamel import yaml data = yaml.safe_load(open(''defaults.yaml'')) data[''url'']


#!/usr/bin/env python import sys import yaml def main(argv): with open(argv[0]) as stream: try: #print(yaml.load(stream)) return 0 except yaml.YAMLError as exc: print(exc) return 1 if __name__ == "__main__": sys.exit(main(sys.argv[1:]))