Python技术或纯文本输出的简单模板系统

我正在寻找Python的技术或模板系统格式化输出到简单的文本。 我需要的是,它将能够遍历多个列表或字典。 如果我能够将模板定义到单独的文件(如output.templ)而不是将其硬编码到源代码中,那将会很好。

作为我想达到的简单例子,我们有variablestitlesubtitlelist

 title = 'foo' subtitle = 'bar' list = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] 

通过模板运行,输出如下所示:

 Foo Bar Monday Tuesday Wednesday Thursday Friday Saturday Sunday 

这个怎么做? 谢谢。

python有相当多的模板引擎: Jinja , Cheetah , Genshi 等等 。 你不会犯任何错误。

您可以使用标准库string模板 :

所以你有一个文件foo.txt

 $title ... $subtitle ... $list 

和一本字典

 d={ 'title':title, 'subtitle':subtitle, 'list':'\n'.join(list) } 

那么这很简单

 from string import Template #open the file filein = open( 'foo.txt' ) #read it src = Template( filein.read() ) #do the substitution src.substitute(d) 

然后你可以打印src

当然,正如Jammon所说,你还有很多其他好的模板引擎(这取决于你想要做什么……标准的string模板可能是最简单的)


充分的工作例子

foo.txt的

 $title ... $subtitle ... $list 

example.py

 from string import Template #open the file filein = open( 'foo.txt' ) #read it src = Template( filein.read() ) #document data title = "This is the title" subtitle = "And this is the subtitle" list = ['first', 'second', 'third'] d={ 'title':title, 'subtitle':subtitle, 'list':'\n'.join(list) } #do the substitution result = src.substitute(d) print result 

然后运行example.py

 $ python example.py This is the title ... And this is the subtitle ... first second third 

如果您更喜欢使用标准库附带的东西,请查看格式string语法 。 默认情况下,它不能像输出示例中那样格式化列表,但是可以使用重写convert_field方法的自定义格式器来处理此列表。

假设您的自定义格式化器cf使用转换代码l来格式化列表,这应该会产生您给出的示例输出:

 cf.format("{title}\n{subtitle}\n\n{list!l}", title=title, subtitle=sibtitle, list=list) 

或者,您可以使用"\n".join(list)预先格式化您的列表,然后将其传递给正常的模板string。

我不知道这是否简单,但猎豹可能会有所帮助。