不缩进打印多行字符串变量

10

如何将多行字符串变量打印到控制台而不缩进?

目前我尝试过以下方法,但没有成功:

# Grid.
grid = """rnbqkbnr
          pppppppp
          ********
          ********
          ********
          PPPPPPPP
          RNBQKBNR"""

# Show grid.
print(grid)

输出结果如下:

rnbqkbnr
             pppppppp
             ********
             ********
             ********
             PPPPPPPP
             RNBQKBNR

这是我正在寻找的输出:

rnbqkbnr
pppppppp
********
********
********
PPPPPPPP
RNBQKBNR

2
跨站点重复:http://codereview.stackexchange.com/q/60366 - jonrsharpe
这与文档字符串非常相似,对于其存在一个通用算法来解析缩进。您可以从那里重用代码。 - poke
6个回答

22

使用textwrap.dedent(text)函数。

>>> from textwrap import dedent
>>> dedent("""\
    rnbqkbnr
    pppppppp
    ********
    ********
    ********
    PPPPPPPP
    RNBQKBNR""")
'rnbqkbnr\npppppppp\n********\n********\n********\nPPPPPPPP\nRNBQKBNR'
>>> print(_)
rnbqkbnr
pppppppp
********
********
********
PPPPPPPP
RNBQKBNR

6

试试这个:

# Grid.
grid = """\
rnbqkbnr
pppppppp
********
********
********
PPPPPPPP
RNBQKBNR"""

# Show grid.
print(grid)

在一行的末尾添加\可以移除不必要的换行符。

谢谢,还有一个不错的适当解决方案。 - maartenpaauw

5
print('\n'.join(grid.split()))

如果你的行内有空格,而你希望保留这些空格:

for line in grid.splitlines():
    print(line.strip())

3
这是对问题提出者具体示例的满意解决方案,但要注意:如果文本网格中包含内部空格,那么它们也将被分开。例如,"foo bar \n aaaaaaa \n bbbbbbb" 将会把 "foo" 和 "bar" 放在不同的行上。 - Kevin
1
请注意,这也会去除嵌套缩进,这可能不是期望的结果。 - poke

2

"""内部不要缩进:

# Grid.
grid = """rnbqkbnr
pppppppp
********
********
********
PPPPPPPP
RNBQKBNR"""

# Show grid.
print(grid)

正常工作。

1
是的,这是最直接的解决方案。如果您希望“rnb…”行与源代码中的其他行对齐,请使用grid = """\ ,然后将rnb...放在下一行。 - Kevin
3
谢谢您的回答和时间。但我希望避免这个解决方案。 - maartenpaauw
3
有时候我想缩进多行字符串,因为它在已经有缩进的代码块内。没有缩进的多行字符串会使代码难以阅读。 - Niclas von Caprivi
@NiclasvonCaprivi 我从未声称这是唯一的解决方案--但它是一个解决方案。有些人不知道缩进代码块内部的多行字符串本身不需要缩进。 - John Coleman

1
def unindent(string):
    return ''.join(map(str.lstrip, string.splitlines(1)))

# Grid.
grid = """rnbqkbnr
          pppppppp
          ********
          ********
          ********
          PPPPPPPP
          RNBQKBNR"""

# Show grid.
print(unindent(grid))

0

你也可以尝试使用re模块,并移除所有行的前导空格:

grid = """rnbqkbnr
          pppppppp
          ********
          ********
          ********
          PPPPPPPP
          RNBQKBNR"""import re
print(re.sub('^\s+', '', grid, flags=re.MULTILINE))

rnbqkbnr
pppppppp
********
********
********
PPPPPPPP
RNBQKBNR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接