Python技术或纯文本输出的简单模板系统
我正在寻找Python的技术或模板系统格式化输出到简单的文本。 我需要的是,它将能够遍历多个列表或字典。 如果我能够将模板定义到单独的文件(如output.templ)而不是将其硬编码到源代码中,那将会很好。
作为我想达到的简单例子,我们有variablestitle
, subtitle
和list
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。
我不知道这是否简单,但猎豹可能会有所帮助。