我正在寻找Python的技术或模板系统,以便将输出格式化为简单文本。我需要的是它能够遍历多个列表或dicts。如果我能够将模板定义到单独的文件(如output.templ)而不是将其硬编码到源代码中,那将是很好的。
作为我想要实现的简单示例,我们有变量title
,subtitle
和list
title = 'foo'
subtitle = 'bar'
list = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
在模板中运行,输出看起来像这样:
Foo
Bar
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
怎么做?谢谢。
答案 0 :(得分:166)
您可以使用标准库string template:
所以你有一个文件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所说,你有很多其他好的模板引擎(这取决于你想做什么......标准字符串模板可能是最简单的)
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
答案 1 :(得分:14)
如果您更喜欢使用标准库附带的内容,请查看format string syntax。默认情况下,它无法像输出示例中那样格式化列表,但您可以使用覆盖custom Formatter方法的convert_field
进行处理。
假设您的自定义格式化程序cf
使用转换代码l
来格式化列表,这应该会生成给定的示例输出:
cf.format("{title}\n{subtitle}\n\n{list!l}", title=title, subtitle=sibtitle, list=list)
或者,您可以使用"\n".join(list)
预先格式化列表,然后将其传递给普通模板字符串。
答案 2 :(得分:9)
答案 3 :(得分:0)
我不知道它是否简单,但Cheetah可能有所帮助。