假设我有一大块文字,比如说
喜马拉雅朝圣的第三次也是最后一次轮换探索了 神圣空间的主题与一对宏伟的大曼荼罗 绘画,立体的二维表征 特定神灵所在的建筑空间。约会到 十四世纪和十六世纪,这些画作代表着 鲜艳的色彩,神灵Hevajra的宇宙观。其他几个 观看的绘画描绘了各种藏族命令的历史教师。
在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代码中?
我正在寻找的答案不是:将整篇文章放在一行
同样,我需要添加跨越多行的文本,而不会产生额外的空白区域。
答案 0 :(得分:14)
当您使用三重引号字符串时,没有缩进:
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会自动将一个表达式中的连续字符串连接在一起(参见String literal concatenation)。
您仍可以使用+
符号明确地连接字符串,但请使用括号使其成为一个表达式:
foo = (
"this text will be " +
"joined into one long string. " +
"It is concatenated " +
"explictly using the `+` operator."
)
另一种方法是在行尾之前使用反斜杠:
foo = "This is not " \
"recommended"
但我发现使用括号和字符串文字串联更易读。
答案 1 :(得分:0)
有几种方法可以做到这一点,当你有多个字符串而它们之间只有空格时,编译器会从中创建一个字符串,如前所述。你也可以使用\
来逃避行尾。就像这样。
SomeText="Something" \
"Something else"
或
SomeText="Something" + \
"Something else"
缺点是你必须记住每一行\
。作为一般规则,使用+
将多个字符串连接在一起是一个坏主意,因为它为它找到的每个+
生成字符串的副本,因为字符串是不可变的,这使得它需要很长时间时间。而是考虑使用str.join
,就像这样。
SomeText="\n".join(["Something",
"Something else",
"Last Item"])
请注意,这具有额外的优势,您可以根据您正在做的事情(换行符或无字符)将" "
替换为其他分隔符。
答案 2 :(得分:0)
textwrap.dedent
将清理那些前导空格,而不会弄乱你的源缩进。