A good way to make long strings wrap to newline in Python? (3.x)
Question: In my project, I have a bunch of strings that are read in from a file. Most of
them, when printed in the command console, exceed 80 characters in length and
wrap around, looking ugly.

I want to be able to have Python read the string, then test if it is over 75
characters in length. If it is, then split the string up into multiple
strings, then print one after the other on a new line. I also want it to be
smart, not cutting off full words. i.e. `"The quick brown <newline> fox..."`
instead of `"the quick bro<newline>wn fox..."`.

I've tried modifying similar code that truncates the string after a set
length, but just trashes the string instead of putting it in a new line.

What are some methods I could use to accomplish this?


Answer: You could use `textwrap` module:

    
    
    >>> import textwrap
    >>> strs = "In my project, I have a bunch of strings that are read in from a file. Most of them, when printed in the command console, exceed 80 characters in length and wrap around, looking ugly."
    >>> print(textwrap.fill(strs, 20))
    In my project, I
    have a bunch of
    strings that are
    read in from a file.
    Most of them, when
    printed in the
    command console,
    exceed 80 characters
    in length and wrap
    around, looking
    ugly.
    

**help** on `textwrap.fill`

    
    
    >>> textwrap.fill?
    
    Definition: textwrap.fill(text, width=70, **kwargs)
    Docstring:
    Fill a single paragraph of text, returning a new string.
    
    Reformat the single paragraph in 'text' to fit in lines of no more
    than 'width' columns, and return a new string containing the entire
    wrapped paragraph.  As with wrap(), tabs are expanded and other
    whitespace characters converted to space.  See TextWrapper class for
    available keyword args to customize wrapping behaviour.
    

Use `regex` if you don't want to merge a line into another line:

    
    
    import re
    strs = """In my project, I have a bunch of strings that are.
    Read in from a file.
    Most of them, when printed in the command console, exceed 80.
    Characters in length and wrap around, looking ugly."""
    print('\n'.join(line.strip() for line in re.findall(r'.{1,40}(?:\s+|$)', strs)))
    """
    Reading a single line at once:
    for x in strs.splitlines():
        print '\n'.join(line.strip() for line in re.findall(r'.{1,40}(?:\s+|$)', x))
    """
    

**output:**

    
    
    In my project, I have a bunch of strings
    that are.
    Read in from a file.
    Most of them, when printed in the
    command console, exceed 80.
    Characters in length and wrap around,
    looking ugly.
    

