python格式化字符串以忽略缩进空格

时间:2014-10-24 13:13:21

标签: python string formatting

我有一个具有实例属性a,b,c的类。我使用了textwrap,但它不起作用。

 def __str__(self):
    import textwrap.dedent
    return textwrap.dedent(
    """#{0}
    {1}
    {2}
    """.format(self.a,self.b,self.c)

然而,这不起作用,我得到像

这样的输出
a
        b
        c

3 个答案:

答案 0 :(得分:6)

使用"""呈现字符串时,会计算换行符和空格。如果你想让它在没有dedent的情况下工作,你的代码应该是这样的:

def __str__(self):
   return """#{0}
{1}
{2}
""".format(self.a,self.b,self.c)

否则,{1}{2}之前的标签也在字符串中。或者,您可以使用:

"#{0}\n{1}\n{2}\n".format(self.a,self.b,self.c)

关于dedent以及为什么它不起作用,请注意documentation

中的这一行
  

“hello”和“\ thello”这些行被认为没有共同的前导空格。

所以如果你想让dedent工作,你需要每一行开始相同,所以你的代码应该是:

    return textwrap.dedent(
    """\
    #{0}
    {1}
    {2}
    """.format(self.a,self.b,self.c))

在这种情况下,每一行都以\t开头,dedent识别并删除。

答案 1 :(得分:3)

这样做:

from textwrap import dedent

def __str__(self):
    return textwrap.dedent("""\
        #{0}
        {1}
        {2}
        """.format(self.a,self.b,self.c))

答案 2 :(得分:0)

textwrap.dedent剥离公共领先空白(请参阅documentation)。如果你想要这个,你需要做这样的事情:

def __str__(self):
    S = """\
        #{0}
        {1}
        {2}
    """
    return textwrap.dedent(S.format(self.a, self.b, self.c))