Conserver et lire l'ordre dans PyYAML

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

Conserver et lire l'ordre dans PyYAML
Ignorer # ligne et lire avec les pandas
Créer et lire des paquets de messages en Python
Lire et écrire des fichiers JSON avec Python
Lire DXF avec python
Lisez le fichier csv et affichez-le dans le navigateur
Lire et écrire en virgule flottante simple précision en Python
Lire et écrire des balises NFC avec python en utilisant PaSoRi
Lisez XBRL et visualisez facilement les changements dans les performances de l'entreprise
Ordre naturel en Python
Ordre de référence des variables de classe et des variables d'instance dans "self. Variables de classe" en Python
Conseils pour coder courts et faciles à lire en Python
Lire json avec C # et convertir en type dictionnaire (forcé)
Extraire les éléments du tableau et les index dans l'ordre décroissant avec numpy
Lire et écrire un fichier csv
Lire la formule d'Euler en Python
Lire et écrire des fichiers
Lire du XML avec un espace de noms spécifié en Python
Lire les e-mails Outlook avec Python
Pile et file d'attente en Python
Écrire et lire des fichiers
Unittest et CI en Python
Lire la sortie Fortran avec python