Как я могу включить файл 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

2022-11-20T23:35:03+00:00