Comment analyser un fichier YAML en Python?
La méthode la plus simple et la plus pure sans recourir aux en-têtes C est 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)
Et c'est tout. Plus d'infos ici:
# -*- 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)
a list:
- 1
- 42
- 3.141
- 1337
- help
- €
a string: bla
another dict:
foo: bar
key: value
the answer: 42
.yml
et .yaml
Pour votre application, les éléments suivants peuvent être importants:
Voir aussi: Comparaison des formats de sérialisation des données
Si vous cherchez plutôt un moyen de créer des fichiers de configuration, vous pouvez lire mon court article Fichiers de configuration en Python
Si vous avez YAML conforme à la spécification YAML 1.2 (publié en 2009), vous devez utiliser ruamel.yaml (disclaimer: je suis l'auteur de ce paquet) . de PyYAML, qui prend en charge la majorité de YAML 1.1 (à partir de 2005).
Si vous voulez pouvoir conserver vos commentaires lors des allers-retours, vous devriez certainement utiliser ruamel.yaml.
La mise à niveau de l'exemple de Jon est simple:
import ruamel.yaml as yaml
with open("example.yaml") as stream:
try:
print(yaml.safe_load(stream))
except yaml.YAMLError as exc:
print(exc)
Utilisez safe_load()
sauf si vous avez le contrôle total sur l'entrée, si vous en avez besoin (rarement le cas) et si vous savez ce que vous faites.
Si vous utilisez pathlib Path
pour manipuler des fichiers, il vaut mieux utiliser la nouvelle API ruamel.yaml fournit:
from ruamel.yaml import YAML
from pathlib import Path
path = Path('example.yaml')
yaml = YAML(typ='safe')
data = yaml.load(path)
Importez le module yaml et chargez le fichier dans un dictionnaire appelé 'my_dict':
import yaml
my_dict = yaml.load(open('filename'))
C'est tout ce dont vous avez besoin. L'ensemble du fichier yaml se trouve maintenant dans le dictionnaire "my_dict".
Exemple:
defaults.yaml
url: https://www.google.com
environment.py
from ruamel import yaml
data = yaml.safe_load(open('defaults.yaml'))
data['url']
J'utilise ruamel.yaml . Détails & débat ici.
from ruamel import yaml
with open(filename, 'r') as fp:
read_data = yaml.load(fp)
L'utilisation de ruamel.yaml est compatible (avec quelques problèmes simples pouvant être résolus) avec les anciens usages de PyYAML et, comme indiqué dans le lien que j'ai fourni, utilisez
from ruamel import yaml
au lieu de
import yaml
et cela résoudra la plupart de vos problèmes.
EDIT: PyYAML n'est pas mort, il est simplement maintenu à un endroit différent.
#!/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 __== "__main__":
sys.exit(main(sys.argv[1:]))