7

假设我有一大段文字,比如说

喜马拉雅朝圣的第三轮也是最后一轮以一对宏伟的大型曼陀罗画作探索神圣空间的主题,这是对特定神灵居住的三维建筑空间的二维表示。这些画作可追溯至十四世纪和十六世纪,以鲜艳的色彩代表了喜金刚的宇宙观。展出的其他几幅画作描绘了不同藏族教派的历史老师。

在Java中我可以写成

"The third and final rotation of Himalayan Pilgrimage explores "
+ "the theme of Sacred Space with a pair of magnificent large "
+ "mandala paintings, two-dimensional representations of a "
+ "three-dimensional architectural space where a specific "
+ "deity resides. Dating to the fourteenth and sixteenth "
+ "centuries, these paintings represent, in vivid colors, "
+ "a cosmology of the deity Hevajra. Several other paintings"
+ " on view depict historic teachers of various Tibetan orders."

然而,在 Python 中,如果我这样做,我会收到有关加号的抱怨+。相反,如果我使用'''缩进,我会得到一堆前导空格(缩进,因此代码易于阅读)。

有谁知道这个问题的解决方案:如何将一大段文本粘贴到 Python 代码中而不会产生空格?

我正在寻找的答案不是:将整个文本放在一行

同样,我需要添加跨越多行的文本,而不会产生额外的空白。

4

3 回答 3

19

当您使用三引号字符串时,您不必缩进:

class SomeClass(object):
    def somemethod(self):
        return '''\
This text
does not need to be indented
at all.
In this text, newlines are preserved.
'''
        # but do continue the next line at the right indentation.

您还可以使用括号自动连接字符串:

foo = (
    "this text will be "
    "joined into one long string. "
    "Note that I don't need to concatenate these "
    "explictly. No newlines are included\n"
    "unless you insert them explicitly."
)

因为 python 会自动将一个表达式中的连续字符串连接在一起(请参阅字符串文字连接)。

您仍然可以自由地使用+符号来显式连接字符串,但请使用括号使其成为一个表达式:

foo = (
    "this text will be " +
    "joined into one long string. " + 
    "It is concatenated " +
    "explictly using the `+` operator."
)

另一种方法是在行尾之前使用反斜杠:

foo = "This is not " \
    "recommended"

但我发现使用括号和字符串文字连接更具可读性。

于 2013-01-29T17:42:06.827 回答
0

有几种方法可以做到这一点,当您有多个字符串之间只有空格时,编译器会从它们创建一个字符串,如前所述。您也可以使用\转义行尾,就像这样。

SomeText="Something" \
         "Something else"

或者

SomeText="Something" + \
         "Something else"

这样做的缺点是你必须记住\每一行的。作为一般规则,使用+将许多字符串连接在一起是一个坏主意,因为它会为+找到的每个字符串创建一个副本,因为字符串是不可变的,这会花费很长时间。而是考虑使用str.join,像这样。

SomeText="\n".join(["Something",
                  "Something else",
                  "Last Item"])

请注意,这具有额外的优势,您可以" "根据您正在执行的操作(换行符或无字符)将 替换为其他分隔符。

于 2013-01-29T17:53:13.877 回答
0

textwrap.dedent将清理那些前导空格,而不会弄乱您的源缩进。

于 2013-01-29T20:46:03.453 回答