Для пользователей Python вы можете попробовать pyyaml-include .
Установить
pip install pyyaml-include
Использование
import yaml
from yamlinclude import YamlIncludeConstructor
YamlIncludeConstructor.add_to_loader_class(loader_class=yaml.FullLoader, base_dir='/your/conf/dir')
with open('0.yaml') as f:
data = yaml.load(f, Loader=yaml.FullLoader)
print(data)
Предположим, у нас есть такие YAML файлы:
├── 0.yaml
└── include.d
├── 1.yaml
└── 2.yaml
name: "1"
name: "2"
Включить файлы по имени
На верхнем уровне:
Если 0.yaml
было:
!include include.d/1.yaml
Мы получим:
{"name": "1"}
В отображении:
Если 0.yaml
было:
file1: !include include.d/1.yaml
file2: !include include.d/2.yaml
Мы получим:
file1:
name: "1"
file2:
name: "2"
В последовательности:
Если 0.yaml
было:
files:
- !include include.d/1.yaml
- !include include.d/2.yaml
Мы получим:
files:
- name: "1"
- name: "2"
ℹ Примечание :
Имя файла может быть абсолютным (например, /usr/conf/1.5/Make.yml
) или относительным (например, ../../cfg/img.yml
).
Включить файлы по шаблону
Имя файла может содержать подстановочные знаки в стиле оболочки. Данные, загруженные из файла (ов), найденных с помощью подстановочных знаков, будут установлены в последовательности.
Если 0.yaml
было:
files: !include include.d/*.yaml
Мы получим:
files:
- name: "1"
- name: "2"
ℹ Примечание :
- Для
Python>=3.5
, если recursive
аргумент тега !include
YAML равен true
, шаблон “**”
будет сопоставлять любые файлы и ноль или более каталогов и подкаталогов.
- Использование шаблона
“**”
в больших деревьях каталогов может потребовать чрезмерного количества времени из-за рекурсивного поиска.
Чтобы включить аргумент recursive
, мы напишем тег !include
в режиме Mapping
или Sequence
:
- Аргументы в режиме
Sequence
:
!include [tests/data/include.d/**/*.yaml, true]
- Аргументы в режиме
Mapping
:
!include {pathname: tests/data/include.d/**/*.yaml, recursive: true}