使用python替换某些格式的参数

时间:2015-05-22 22:23:08

标签: python xml

我有一个带有参数的XML表单,方法如下:

<Text>Answer the Question</Text>
<Text>Q${ID}: ${Text}:</Text>

使用此xml文本文件,我想将${ }中的参数替换为相应的值。例如,如果我有以下值:

ID = '1', Text = 'Capital of Michigan is'

然后我希望结果是:

<Text>Answer the Question</Text>
<Text>Q1: Capital of Michigan is:</Text>

除此功能外,程序还会导入csv文件,然后写入新文件。所以我试图用Python编写它。在Python中执行上述功能的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您真的需要知道预期的模板格式,因此您可以使用正确的模板引擎。

此示例 碰巧与标准库中string.Template的格式匹配。这实际上是否与预期格式完全匹配,或者恰好足够接近这个例子,很难说。如果你在任何地方都没有比${identifier}更复杂的东西,那就可以了。

所以:

>>> xml_template = '''<Text>Answer the Question</Text>
<Text>Q${ID}: ${Text}:</Text>'''
>>> ID = '1'
>>> Text = 'Capital of Michigan is'
>>> xml = string.Template(xml_template).substitute(ID=ID, Text=Text)
>>> xml
'<Text>Answer the Question</Text>\n<Text>Q1: Capital of Michigan is:</Text>'

您可能还想使用safe_substitute,或者传递**locals()而不是传递显式参数,或者将变量实际存储在dict中而不是作为一堆单独的变量等。有关进一步细节和示例的文档。

如果您的模式格式更复杂,可以自定义string.Template(再次查看文档),但您必须了解您尝试自定义的复杂模板方言......这使得找出模式所针对的模板引擎并使用兼容的东西更为明智。

答案 1 :(得分:0)

由于您正在复制模板格式,因此最简单的方法是使用已经实现了这些构造的模板语言。一个选项是mako,语法如下(来自mako网页):

from mako.template import Template
print(Template("hello ${data}!").render(data="world"))