我试图将文本拆分成段落。我想找到第一行,并将其分配给变量,其余行应该在<p></p>
text = "Firstline
Secondline
Third line"
这就是我所拥有的:
text = unicode(ws.description)
object.firstline = text.split('\n', 1)[0] #This works, and should not be wrapped in <p></p>
bodytext = text.partition('\n')[2]
object.body = ''.join('<p>'+L+'</p>' for L in bodytext.split('\n'))
但是object.body
会返回此值
object.body = "<p></p>
<p>Secondline</p>
<p></p>
<p>Third line</p>
<p></p>"
如何删除空行,以便我没有空<p></p>
?
这是工作代码(来自Ashwini Chaudhary的回答)
text = unicode(ws.description)
if not "\n" in text:
object.firstline = text
else:
first, rest = text.split('\n', 1)
object.firstline = first
object.body = '\n'.join(u'<p>{}</p>'.format(x) for x in rest.splitlines() if x)
答案 0 :(得分:1)
您只需要确定字符串是否为空之前加入它。
假设:
>>> text = """Firstline
...
... Secondline
...
... Third line"""
这变为:
>>> ''.join('<p>' + L + '</p>' for L in text.split('\n') if L)
'<p>Firstline</p><p>Secondline</p><p>Third line</p>'
text.split
创建一个列表,您正在迭代; if L
检查该列表中的非空值。
答案 1 :(得分:1)
首先在'\n'
分割一次以获得第一行和其余行:
>>> first, rest = text.split('\n', 1)
>>> first
'Firstline'
>>> rest
'\nSecondline\n\nThird line'
现在循环其余的行(rest.splitlines()
)并使用简单的if
条件删除空行:
>>> print '\n'.join('<p>{}</p>'.format(x) for x in rest.splitlines() if x)
<p>Secondline</p>
<p>Third line</p>
答案 2 :(得分:0)
''.join('<p>'+L+'</p>' for L in bodytext.split('\n') if L)
答案 3 :(得分:0)
使用str.splitlines
表示行边界,然后使用str.join
加入字符串。
text = """Firstline
Secondline
Third line"""
print '\n'.join('<p>'+l+'</p>' for l in text.splitlines() if l)
输出: -
>>>
<p>Firstline</p>
<p>Secondline</p>
<p>Third line</p>
要打印最后两行,
text = text.splitlines[1:]
print '\n'.join('<p>'+l+'</p>' for l in text if l)
输出: -
>>>
<p>Secondline</p>
<p>Third line</p>