【问题标题】:Replace long string in python code with string from a file (keep placeholders)用文件中的字符串替换python代码中的长字符串(保留占位符)
【发布时间】:2018-03-31 03:50:36
【问题描述】:

我必须为一些文本文件制作一个生成器,这些文本文件必须包含一个长字符串,其中一个文件与另一个文件之间存在许多差异。我通过在其中包含占位符的 DEFAULT_STRING 来做到这一点。我想要做的是将文本放在文件中并保留功能(有占位符)。有什么建议吗?

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 多行,因此处理仅包含字符串的单独文件会更容易。

【问题讨论】:

  • 将其放入文件中,读取并使用字符串作为格式模板,就像它是文字一样。有什么问题吗?
  • 所以如果我在一个文件中有“A very long {ph1}”,在我分配给一个字符串之后,它会识别 {ph1} 作为占位符并支持 .format 吗?
  • 是的,没有魔法。文字或文件没有区别,{} 不是特殊字符。试试看。

标签: python string python-2.7 file


【解决方案1】:
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))

【讨论】:

    【解决方案2】:

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

    您可以将 DEFAULT_STRING 中的命名占位符替换为位置占位符(例如 {0}、{1}),或者您可以通过查找“{”和“}”之间的字符来解析字符串中的名称并构建一个 * *kwargs 字典传递给 .format() 使用名称作为键和值,如您的示例中所示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      相关资源
      最近更新 更多