Split a string into pieces of max length X - split only at spaces

12,755

Use the textwrap module (it will also break on hyphens):

import textwrap
lines = textwrap.wrap(text, width, break_long_words=False)

If you want to code it yourself, this is how I would approach it: First, split the text into words. Start with the first word in a line and iterate the remaining words. If the next word fits on the current line, add it, otherwise finish the current line and use the word as the first word for the next line. Repeat until all the words are used up.

Here's some code:

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)
Share:
12,755
Mawg says reinstate Monica
Author by

Mawg says reinstate Monica

Donate a cup of food for free: Click to Give @ The Hunger Site SOreadytohelp

Updated on June 22, 2022

Comments

  • Mawg says reinstate Monica
    Mawg says reinstate Monica almost 2 years

    I have a long string which I would like to break into pieces, of max X characters. BUT, only at a space (if some word in the string is longer than X chars, just put it into its own piece).

    I don't even know how to begin to do this ... Pythonically

    pseudo code:

    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
    

    Before I code that up, is there some python module that can help me (I don't think that pprint can)?