Как я могу включить файл YAML в другой?
Ваш вопрос не требует решения transclusion Python, но вот решение, использующее transclusion PyYAML.
PyYAML позволяет прикреплять yaml пользовательские конструкторы yml (например, !include
) к загрузчику yml YAML. Я включил корневой yaml каталог, который можно настроить transclusion так, чтобы это решение поддерживало transclusion относительные и абсолютные yml ссылки на файлы.
Решение на основе классов
Вот решение yml на основе классов, которое transclusion позволяет избежать глобальной yaml корневой переменной моего yaml исходного ответа.
См. этот transclusion gist для получения аналогичного, более transclusion надежного решения Python transclusion 3, которое использует метакласс yml для регистрации настраиваемого transclusion конструктора.
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)
Пример:
foo.yaml
a: 1
b:
- 1.43
- 543.55
c: !include bar.yaml
bar.yaml
- 3.6
- [1, 2, 3]
Теперь transclusion файлы можно загружать с помощью:
>>> 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]]}
yaml
transclusion
Как я могу включить файл YAML в другой?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.