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)而不是将其硬编码到源代码中,那就太好了。

作为我想要实现的简单示例,我们有变量 titlesubtitlelist

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中是不是有用于纯文本文件的本机模板系统?的主要内容,如果未能解决你的问题,请参考以下文章

用于 Python 的 ENML 到纯文本转换器

python读写csv文件

用文本编辑器编辑的文档保存英文字母时用的是啥码

本机 C# pdf 阅读器 [关闭]

0x01 RHEL linux 文本编辑常用命令

怎么让HTML显示纯文本