2009-09-10 10 views
6

Tengo una cadena larga (varios párrafos) que necesito dividir en una lista de cadenas de líneas. La determinación de lo que hace una "línea" se basa en:División de una cadena sin saltos de línea en una lista de líneas con un recuento máximo de columnas

  • El número de caracteres en la línea es menor que o igual a X (donde X es un número fijo de columnas por line_)
  • OR, hay una nueva línea en la cadena original (que obligará a una nueva "línea" que se creará.

sé que puedo hacer esto de forma algorítmica, pero me preguntaba si pitón tiene algo que puede manejar este caso. es esencialmente palabra-envolviendo una cadena.

Y, por cierto, la superación Las líneas deben romperse en los límites de las palabras, no en los límites de los caracteres.

He aquí un ejemplo de entrada y salida:

de entrada:

"Within eight hours of Wilson's outburst, his Democratic opponent, former-Marine Rob Miller, had received nearly 3,000 individual contributions raising approximately $100,000, the Democratic Congressional Campaign Committee said. 

Wilson, a conservative Republican who promotes a strong national defense and reining in the size of government, won a special election to the House in 2001, succeeding the late Rep. Floyd Spence, R-S.C. Wilson had worked on Spence's staff on Capitol Hill and also had served as an intern for Sen. Strom Thurmond, R-S.C." 

Salida:

"Within eight hours of Wilson's outburst, his" 
"Democratic opponent, former-Marine Rob Miller," 
" had received nearly 3,000 individual " 
"contributions raising approximately $100,000," 
" the Democratic Congressional Campaign Committee" 
" said." 
"" 
"Wilson, a conservative Republican who promotes a " 
"strong national defense and reining in the size " 
"of government, won a special election to the House" 
" in 2001, succeeding the late Rep. Floyd Spence, " 
"R-S.C. Wilson had worked on Spence's staff on " 
"Capitol Hill and also had served as an intern" 
" for Sen. Strom Thurmond, R-S.C." 

Respuesta

12

EDITAR

Lo que se busca es textwrap, pero eso es sólo una parte de la solución, no al completo. Para tener en cuenta nueva línea necesita hacer esto:

from textwrap import wrap 
'\n'.join(['\n'.join(wrap(block, width=50)) for block in text.splitlines()]) 

>>> print '\n'.join(['\n'.join(wrap(block, width=50)) for block in text.splitlines()]) 

Within eight hours of Wilson's outburst, his 
Democratic opponent, former-Marine Rob Miller, had 
received nearly 3,000 individual contributions 
raising approximately $100,000, the Democratic 
Congressional Campaign Committee said. 

Wilson, a conservative Republican who promotes a 
strong national defense and reining in the size of 
government, won a special election to the House in 
2001, succeeding the late Rep. Floyd Spence, 
R-S.C. Wilson had worked on Spence's staff on 
Capitol Hill and also had served as an intern for 
Sen. Strom Thurmond 
+0

¡Buena respuesta! Así es como pensé hacerlo también. Pero, ¿qué pasa con el "Wilson, a" después de la línea en blanco? –

+0

@Andrei, actualicé mi respuesta con una solución aún mejor. –

+0

¡Genial! Pero ahora parece desordenado. : P –

Cuestiones relacionadas