2014-11-24 3 views
0

글자를 단락으로 나눠보십시오.개행을 단락으로 나누고 빈 줄을 제거하십시오.

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 반환이 : <p></p> 다음

text = "Firstline 

Secondline 

Third line" 

내가 무엇을 가지고 내부 나는 첫 번째 줄을 발견하고 변수에 할당 할, 그리고 라인의 나머지는 형식의해야 값

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 = 'first line ''. –

+0

@ Garreth00'\ n '이 텍스트에 없다면 : print'텍스트는 한 줄만 포함합니다 ' –

0
''.join('<p>'+L+'</p>' for L in bodytext.split('\n') if L) 
1

(애쉬 위니 Chaudhary의 대답에서) 작업 코드입니다.

을 감안할 때 :

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

garreth-00는 또한 염두에 두어야 @, 즉 줄 바꿈 할 수 '\ 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> 
관련 문제