Python中是不是有用于纯文本文件的本机模板系统?
Posted
技术标签:
【中文标题】Python中是不是有用于纯文本文件的本机模板系统?【英文标题】:Is there a native templating system for plain text files in Python?Python中是否有用于纯文本文件的本机模板系统? 【发布时间】:2014-08-05 05:38:35 【问题描述】:我正在寻找用于将输出格式化为简单文本的 Python 技术或模板系统。我需要的是它能够遍历多个列表或字典。如果我能够将模板定义为单独的文件(如 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
如何做到这一点?谢谢。
【问题讨论】:
【参考方案1】:您可以使用标准库string 及其模板类。
有一个文件foo.txt
:
$title
$subtitle
$list
以及文件的处理(example.py
):
from string import Template
d =
'title': 'This is the title',
'subtitle': 'And this is the subtitle',
'list': '\n'.join(['first', 'second', 'third'])
with open('foo.txt', 'r') as f:
src = Template(f.read())
result = src.substitute(d)
print(result)
然后运行它:
$ python example.py
This is the title
And this is the subtitle
first
second
third
【讨论】:
请问,字典在哪里?它是一个单独的文件(以及它存储在哪里),还是包含在 Python 脚本中,还是包含在 foo.txt 中? @lawlist:最后添加了一个完整的示例。唯一缺少的是将数据替换到模板中的声明。 为什么从 foo.txt 截取的初始代码有一个尾随$
用于占位符。这有点让我失望,因为它会产生错误。
使用$$
转义输出$
。
@Batandwa 我没有收到错误消息。单个 $
在 Python 3.4 上运行良好【参考方案2】:
如果您更喜欢使用标准库附带的东西,请查看format string syntax。默认情况下,它无法像您的输出示例那样格式化列表,但您可以使用覆盖 convert_field
方法的 custom Formatter 来处理此问题。
假设您的自定义格式化程序 cf
使用转换代码 l
来格式化列表,这应该会产生您给定的示例输出:
cf.format("title\nsubtitle\n\nlist!l", title=title, subtitle=sibtitle, list=list)
或者,您可以使用"\n".join(list)
预先格式化您的列表,然后将其传递给您的普通模板字符串。
【讨论】:
CLI 输出模板非常简单:) 这里是一个如何做到这一点的例子:makina-corpus.com/blog/metier/2016/…。一个简单的模板引擎,在 10 行代码中包含循环和条件。【参考方案3】:python 的模板引擎有很多:Jinja、Cheetah、Genshietc。你不会犯任何错误。
【讨论】:
OP 是否说“本地”?并验证了一些不是的东西!【参考方案4】:我不知道这是否简单,但Cheetah 可能会有所帮助。
【讨论】:
以上是关于Python中是不是有用于纯文本文件的本机模板系统?的主要内容,如果未能解决你的问题,请参考以下文章