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í:
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:]))