【问题标题】:Python: how to escape "%s"Python:如何转义“%s”
【发布时间】:2014-12-11 04:47:52
【问题描述】:

我正在尝试创建一个包含“%s”且没有格式的字符串

例如,我想要这个:

#I want to make mystring = "x %s"

first_value = "x"
mystring = "%s %s" % first_value

所以,我想格式化第一个 %s,但将第二个 %s 留在字符串中。当然,上面的代码给了我一个“TypeError:not enough arguments for format string”

有没有办法在一行中实现这一点?

谢谢


编辑: 我知道我能做到

mystring = "%s %s" % (first_value, "%s")

但是这种看起来很难看。。有没有更好的办法?

【问题讨论】:

标签: python string formatting


【解决方案1】:

您可以通过将格式字符串中的% 字符加倍来转义它:

>>> "%s %%s" % "x"
"x %s"

【讨论】:

    【解决方案2】:

    你可以像这样分配你的字符串:

    mystring = "{} %s".format(first_value)
    

    如果您使用的是 Python 2.6 或更早版本,则需要在花括号中添加一个整数索引:

    mystring = "{0} %s".format(first_value)
    

    这种方法的一个好处是first_value 可以稍后更改类型,您不必调整mystring 的定义,因为.format() 可以采用不同的类型,而您不需要first_value的类型以匹配格式字符串。

    我也认为它看起来比逃避百分号更干净,但我知道这是非常主观的。

    【讨论】:

    • 您也可以在 python2.7 中删除整数索引。 AFAIK,python2.6 是唯一支持 .format 的版本,其中位置参数需要索引。
    • @mgilson 哇。你完全正确。我的世界刚刚天翻地覆。我一直在 2.7 中输入不必要的字符,因为 FAR TOO LONG 不要为此感到羞耻。
    • FWIW,我喜欢里面的额外数字。我发现它更明确,并且我希望我的代码尽可能向后兼容,如果它不是非常不方便的话。 . .但我敢肯定,其他人可能会认为这是毫无意义的练习。 . .
    • @mgilson 当我更改插入到字符串中的参数然后不得不返回并将所有索引移动一个时,我只是讨厌它。我宁愿转储所有数字,所以我只需将参数更改为 .format() 并添加另一组大括号。
    • 很公平——虽然如果你有这么多,可能是时候开始命名它们了 :-) '{name} ...'.format(name='Bam Bam', strength='unbelievable')
    【解决方案3】:

    尝试串联:

    mystring = ("%s " % first_value) + "%s"
    

    输出x %s

    【讨论】:

      【解决方案4】:

      %s 前面加上 % 来转义它:

      mystring = "%s %%s" % first_value
      'x %s'
      

      【讨论】:

        【解决方案5】:

        您可以通过在第一个 '%' 前面加上第二个来避开它:

         print "%%s%s" % 'hello world'
        

        %shello 世界

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-20
          • 2020-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-29
          相关资源
          最近更新 更多