2014-11-24 4 views
0

Im пытается разделить текст на абзацы. Я хочу, чтобы найти первую строку, и присвоить его переменной, а остальные строки должны быть отформатирована в <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>?

Редактировать

Вот рабочий код (от ответа Ашвини Чаудхари)

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) 

ответ

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> 
+0

Я получаю эту ошибку 'ValueError: требуется больше 1 значения для распаковки –

+0

@ Garreth00 Это означает, что ваш текст не содержит символов новой строки, то есть что-то вроде : 'text = 'первая строка''. –

+0

@ Garreth00 'if '\ n' not in text: print 'text содержит только одну строку'' –

0
''.join('<p>'+L+'</p>' for L in bodytext.split('\n') if L) 
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 проверяет непустое значение в этом списке.

+0

@ Гаррет-00 Вы также должны иметь в виде, что новые строки могут be '\ r',' \ n' или '\ r \ n'. Итак, обратите внимание на этот ответ http://stackoverflow.com/a/21840976/764182 – dizpers

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> 
Смежные вопросы