Remarque sur PyYAML
Lors de la lecture d'un fichier Yaml avec PyYAML, il est lu par défaut comme un dictionnaire normal, donc L'ordre des fichiers n'est pas garanti.
Par exemple, si vous avez un fichier Yaml comme celui-ci
data.yml
aaa:
a1: 1
a2: 2
a3: 3
bbb:
b1: 1
b2: 2
b3: 3
ccc:
c1: 1
c2: 2
b3: 3
Si vous normalement yaml.load
et sortez
yaml_load.py
import yaml
data = yaml.load(file("data.yml"))
for k1, v1 in data.items():
for k2, v2 in v1.items():
print("%s - %s - %s" % (k1, k2, v2))
Ça ressemble à ça.
Résultat d'exécution
aaa - a1 - 1
aaa - a3 - 3
aaa - a2 - 2
bbb - b1 - 1
bbb - b2 - 2
bbb - b3 - 3
ccc - c2 - 2
ccc - c1 - 1
ccc - b3 - 3
Si vous souhaitez lire dans l'ordre décrit dans le fichier, lisez-le comme OrderedDict.
yaml_load.py
import yaml
from collections import OrderedDict
#Ajoute ça
yaml.add_constructor(yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
lambda loader, node: OrderedDict(loader.construct_pairs(node)))
data = yaml.load(file("data.yml"))
for k1, v1 in data.items():
for k2, v2 in v1.items():
print("%s - %s - %s" % (k1, k2, v2))
Maintenant, vous pouvez garder l'ordre et lire.
Résultat d'exécution
aaa - a1 - 1
aaa - a2 - 2
aaa - a3 - 3
bbb - b1 - 1
bbb - b2 - 2
bbb - b3 - 3
ccc - c1 - 1
ccc - c2 - 2
ccc - b3 - 3
Autour A été mentionnée
c'est tout
Recommended Posts