Für Python-Benutzer können Sie pyyaml-include ausprobieren .
Installieren
pip install pyyaml-include
Verwendung
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)
Bedenken Sie, wir haben solche YAML- Dateien:
├── 0.yaml
└── include.d
├── 1.yaml
└── 2.yaml
name: "1"
name: "2"
Dateien nach Namen einschließen
Auf der obersten Ebene:
Wenn 0.yaml
war:
!include include.d/1.yaml
Wir werden .. bekommen:
{"name": "1"}
Im Mapping:
Wenn 0.yaml
war:
file1: !include include.d/1.yaml
file2: !include include.d/2.yaml
Wir werden .. bekommen:
file1:
name: "1"
file2:
name: "2"
Der Reihe nach:
Wenn 0.yaml
war:
files:
- !include include.d/1.yaml
- !include include.d/2.yaml
Wir werden .. bekommen:
files:
- name: "1"
- name: "2"
ℹ Hinweis :
Der Dateiname kann entweder absolut (wie /usr/conf/1.5/Make.yml
) oder relativ (wie ../../cfg/img.yml
) sein.
Fügen Sie Dateien mit Platzhaltern hinzu
Der Dateiname kann Platzhalter im Shell-Stil enthalten. Daten, die aus den von Platzhaltern gefundenen Dateien geladen wurden, werden in einer Reihenfolge festgelegt.
Wenn 0.yaml
war:
files: !include include.d/*.yaml
Wir werden .. bekommen:
files:
- name: "1"
- name: "2"
ℹ Hinweis :
- Für
Python>=3.5
wenn recursive
Argument von !include
YAML - Tag ist true
, das Muster “**”
wird alle Dateien übereinstimmen und keine oder mehrere Verzeichnisse und Unterverzeichnisse.
- Die Verwendung des
“**”
Musters in großen Verzeichnisbäumen kann aufgrund der rekursiven Suche übermäßig viel Zeit in Anspruch nehmen.
Um das recursive
Argument zu aktivieren , schreiben wir das !include
Tag in Mapping
oder Sequence
mode:
- Argumente im
Sequence
Modus:
!include [tests/data/include.d/**/*.yaml, true]
- Argumente im
Mapping
Modus:
!include {pathname: tests/data/include.d/**/*.yaml, recursive: true}