2015-08-20 14 views
5

Ho una stringa lunga che vorrei spezzettare, di max caratteri X. MA, solo in uno spazio (se qualche parola nella stringa è più lunga di X caratteri, basta metterla nel suo pezzo).Dividere una stringa in pezzi di lunghezza massima X - dividere solo negli spazi

io non so nemmeno come iniziare a fare questo ... Pythonically

pseudo codice:

declare a list 
while still some string left: 
    take the fist X chars of the string 
    find the last space in that 
    write everything before the space to a new list entry 
    delete everything to the left of the space 

Prima che il codice che fino, c'è qualche modulo python che mi può aiutare (Non penso che lo pprint possa)?

+4

Ho da poco scoperto che Python ha una [textwrap] (https://docs.python.org/3.5/ library/textwrap.html # module-textwrap) module;) – swenzel

risposta

13

Ecco come ci si avvicina: in primo luogo, dividere il testo in parole. Inizia con la prima parola in una riga e continua le parole rimanenti. Se la parola successiva si adatta alla riga corrente, aggiungila, altrimenti completa la riga corrente e usa la parola come prima parola per la riga successiva. Ripeti fino a quando tutte le parole sono esaurite.

Ecco po 'di codice:

text = "hello, this is some text to break up, with some reeeeeeeeeaaaaaaally long words." 
n = 16 

words = iter(text.split()) 
lines, current = [], next(words) 
for word in words: 
    if len(current) + 1 + len(word) > n: 
     lines.append(current) 
     current = word 
    else: 
     current += " " + word 
lines.append(current) 

Aggiornamento: Come sottolineato nei commenti da @swenzel, c'è infatti un modulo per questo: textwrap. Questo produrrà lo stesso risultato di sopra di codice (e sarà anche rompere il trattini):

import textwrap 
lines = textwrap.wrap(text, n, break_long_words=False) 
+0

Sembra un algoritmo migliore del mio (+1) – Mawg

Problemi correlati