2017-02-25 87 views
7

我有一堆YAML文件在一个配置文件夹和模板文件夹中的一堆模板。有一个简单的一个衬垫或功能,我可以用它来解决模板文件YAML文件和替代生成可执行的脚本解析YAML文件并替换为模板

输入:
config文件夹:config/yaml1config/yaml2config/yaml3.
模板:template/template1,template/template2,template3

输出
scripts/script1script2script3

脚本的数=模板数

有2种类型的模板

一说是直接置换 例

YAML1: 
    Titles:4 
    SubTitles:10 
Template1: 
Number of Titles {Titles} where as Number of Subtitles is {SubTitles} 

其他模板是嵌套的。基本上,模板需要基于YAML 实例进行循环:

YAML2: 
    Book: "The Choice of using Choice" 
     Author: "Unknown1" 
    Book: "Chasing Choices" 
     Author:"Known2" 
Template2 
Here are all the Books with Author Info 
The author of the {Book} is {Author} 

回答

1

YAML不知道模板任何东西,你没有指定什么样的模板,需要更新。但是,如果您使用的模板语言假设其替代值来自Python字典中的键值对,那么您可以在YAML文件中指定顶级映射,加载该映射(将构建到Python中字典),然后将其馈入模板引擎。

您仍然需要遍历文件,因此只需几行代码就可以实现上述功能。

2

我不完全确定你要完成什么,我不知道你的可执行脚本是什么意思?如果我正确解释它,您可能会从PyYAML文档中获益。具体来说,关于YAML Tags and Python Types的部分。

有几个YAML标签允许调用python模块或包,并且包参数由它下面的嵌套YAML标签填充。所以,你会写一个类或函数,消耗的YAML kwargs但你只是像这样一条线把它在YAML配置,

!!python/object/apply:module.function [argument, ...] 

虽然你也可以采取一看受益 部分Constructors, Representers and Resolvers以及string.Template来自python文档。

理论上,您应该能够从YAML文件中调用substitution()函数。