2017-10-19 46 views
-2

我必须为某些文本文件生成一个生成器,该文件必须包含一个长字符串,并且每个文件之间存在许多差异。我通过在其中放置一个带有占位符的DEFAULT_STRING来做到这一点。我想要做的是将文本放在一个文件中,并保持功能(有占位符)。有什么建议么?用python代码中的长字符串替换文件中的字符串(保留占位符)

DEFAULT_STRING = """A very long {ph1} string with multiple {ph2} ...... 
that keeps on going {ph3} and I don't like this big string 
inside my code""".format(ph1 = self._first, ph2 = self._second, ph3 = self._third) 

实际的字符串100+行,所以它会更容易在包含字符串的单独文件上工作。

+0

把它放在一个文件中,读取它并使用字符串作为格式模板,就像它是文字一样。有什么问题呢? –

+0

所以如果我在文件内部有“非常长{ph1}”,在分配给一个字符串之后,它是否会将{ph1}识别为占位符并支持.format? – Elliad

+1

是的,没有魔法。文字或文件没有区别,{}不是特殊字符。尝试一下。 –

回答

1

如果我正确理解您的问题,您可以将DEFAULT_STRING写入文件。当你想使用它来做任何格式化时,你会读取该文件的第一行,并在该字符串上调用格式,就像在你的例子中一样。

您可以用位置属性(例如{0},{1})替换DEFAULT_STRING中的指定占位符,也可以通过查找“{”和“}”之间的字符来解析字符串中的名称并构建** kwargs字典传入.format()使用名称作为键和值,如你的例子。

0
values = dict(ph1 = self._first, ph2 = self._second, ph3 = self._third) 

with open('long_string.txt') as infile: 
    with open('out.txt', 'w') as outfile: 
    outfile.write(infile.read().format(**values))