¿Una buena manera de hacer que las cadenas largas se ajusten a la nueva línea en Python?

En mi proyecto, tengo un montón de cadenas que se leen desde un archivo. La mayoría de ellos, cuando se imprimen en la consola de comandos, superan los 80 caracteres y se envuelven alrededor, luciendo feos.

Quiero poder hacer que Python lea la cadena y luego probar si tiene más de 75 caracteres de longitud. Si es así, divida la cadena en varias cadenas, luego imprima una tras otra en una nueva línea. También quiero que sea inteligente, no cortar palabras completas. es decir, "The quick brown fox..." lugar de "the quick brown fox..." .

He intentado modificar un código similar que trunca la cadena después de una longitud determinada, pero simplemente la corta en lugar de ponerla en una nueva línea.

¿Cuáles son algunos métodos que podría usar para lograr esto?

Podrías usar el módulo textwrap :

 >>> 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. 

ayuda en 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 si no desea fusionar una línea en otra línea:

 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)) 

salida:

 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. 

Para eso es el módulo textwrap . Pruebe textwrap.fill(some_string, width=75) .

Esto es similar a la respuesta de Ashwini pero no se usa re :

 lim=75 for 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) 

Salida cuando la entrada es tu pregunta:

 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. ie "The quick brown  fox..." instead of "the quick brown fox...".