A good way to make long strings wrap to newline? A good way to make long strings wrap to newline? python-3.x python-3.x

A good way to make long strings wrap to newline?


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, Ihave a bunch ofstrings that areread in from a file.Most of them, whenprinted in thecommand console,exceed 80 charactersin length and wraparound, lookingugly.

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 morethan 'width' columns, and return a new string containing the entirewrapped paragraph.  As with wrap(), tabs are expanded and otherwhitespace characters converted to space.  See TextWrapper class foravailable keyword args to customize wrapping behaviour.

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

import restrs = """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 stringsthat are.Read in from a file.Most of them, when printed in thecommand console, exceed 80.Characters in length and wrap around,looking ugly.


This is what the textwrap module is for. Try textwrap.fill(some_string, width=75).


This is similar to Ashwini's answer but does not use re:

lim=75for s in input_string.split("\n"):    if s == "": print    w=0     l = []    for d in s.split():        if w + len(d) + 1 <= lim:            l.append(d)            w += len(d) + 1         else:            print " ".join(l)            l = [d]             w = len(d)    if (len(l)): print " ".join(l)

Output when the input is your 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 inlength and wrap around, looking ugly.I want to be able to have Python read the string, then test if it is over75 characters in length. If it is, then split the string up into multiplestrings, then print one after the other on a new line. I also want it to besmart, not cutting off full words. i.e. "The quick brown <newline> fox..."instead of "the quick bro<newline>wn fox...".