2014-01-06 4 views
1

긴 문자열 (예 : 500 문자)을 작은 덩어리 (예 : < = 100 자)로 나누고 단어 전체를 유지하고 싶습니다. 즉, 청크는 가능한 한 100 자 정도가되어야하지만 전체 단어를 잘라서는 안됩니다. 나의 첫 번째 반응은 각 단어를 통해 문자열과 루프를 분리하고 한계에 도달 할 때까지 각 단어를 버퍼에 연결 한 다음 각 청크에 대해 다시 시작하는 것이었지만보다 효율적인 방법이 있어야한다고 생각했습니다.문자열을 청크로 분할하여 파이썬에서 전체 단어 유지

감사합니다.

+0

<= 100 또는 가능한 한 100에 가깝습니까? 어떤거야? 아니면 둘다? 101이 허용됩니까? – Junuxx

+0

모호한 점은 죄송합니다. <= 100 – sundance

답변

5

당신은 파이썬에서 textwrap 모듈을 사용하여이 작업을 수행 할 수 있습니다 당신은 more about it here을 배울 수

s = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu," 

import textwrap 
var = textwrap.wrap(s, 100) 
for line in var: 
    print(len(line)) 

print(var) 

. 추가 수입없이

Live Demo

+0

완벽 하군, 고마워! – sundance

0

는 시도 :

s = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu," 

out = []; leftover = "" 
for i in map(''.join, zip(*[iter(s)]*100)): 
    i = leftover+i 
    toappend, _ , leftover = i.rpartition(" ") 
    if len(toappend) > 100: 
     leftover = toappend[99:] 
     toappend = toappend[:99] 
    out.append(toappend) 

print out 

[OUT] :

[ '로렘 입숨 슬픔이, AMET 앉아 consectetuer의 adipiscing의 ELIT합니다. Aenean 상품 도착. Aenean ','massa. Cum sociis natoque penatibus 및 magnis dis parturient montes, nascetur ridiculus mus. Donec ','quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla 결과는 enim입니다. Don ','ecpede justo, fringilla vel, aliquet nec, vulgetate eget, arcu. enim에서 justo, rhoncus ut, imperdiet ',', venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. 정수 tincidunt. Cras ','dapibus. Vivamus elementum semis nisi. Aenean은 eleifend tellus를 저지른다. Aenean 레오 ligula, portti ']

+0

@alvas, 이것이 OP가 피하고 싶어하는 바라고 생각합니다. – alvas

1
import textwrap 

long_string = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu,' 
string_list = textwrap.wrap(long_string,100, drop_whitespace = False) 

for line in string_list: 
    print(line) 

print(string_list) 

출력 :

['Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean ', 'massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ', 'quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. ', 'Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, ', 'imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. ', 'Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, ', 'porttitor eu,'] 

사용 drop_whitespace = 원래의 간격에게 다른 옵션을

체크 아웃 계속 거짓 here

관련 문제