2017-10-19 54 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))