Votre question ne demande pas de solution en Python, mais en voici une utilisant PyYAML .
PyYAML vous permet d'attacher des constructeurs personnalisés (tels que !include
) au chargeur YAML. J'ai inclus un répertoire racine qui peut être défini afin que cette solution supporte les références de fichiers relatives et absolues.
Solution basée sur la classe
Voici une solution basée sur les classes, qui évite la variable globale Root de ma réponse initiale.
Voir ceci gist pour une solution similaire et plus robuste pour Python 3, qui utilise une métaclasse pour enregistrer le constructeur personnalisé.
import yaml
import os
class Loader(yaml.SafeLoader):
def __init__(self, stream):
self._root = os.path.split(stream.name)[0]
super(Loader, self).__init__(stream)
def include(self, node):
filename = os.path.join(self._root, self.construct_scalar(node))
with open(filename, 'r') as f:
return yaml.load(f, Loader)
Loader.add_constructor('!include', Loader.include)
Un exemple :
foo.yaml
a: 1
b:
- 1.43
- 543.55
c: !include bar.yaml
bar.yaml
- 3.6
- [1, 2, 3]
Maintenant les fichiers peuvent être chargés en utilisant :
>>> with open('foo.yaml', 'r') as f:
>>> data = yaml.load(f, Loader)
>>> data
{'a': 1, 'b': [1.43, 543.55], 'c': [3.6, [1, 2, 3]]}
0 votes
therightstuff.de/2010/01/30/
3 votes
Je suis récemment tombé sur HiYaPyCo pour Python qui fait exactement cela. Vous pouvez fusionner différents fichiers YAML ensemble. C'est un très beau module Python qui mérite d'être connu.
0 votes
Voir aussi : stackoverflow.com/questions/41620674/utilisation de placeurs dans le langage HTML