Для користувачів 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"
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}