将换行符拆分为段落并删除空行

时间:2014-11-24 13:45:17

标签: python string

我试图将文本拆分成段落。我想找到第一行,并将其分配给变量,其余行应该在<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)

4 个答案:

答案 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>