Reemplazar un espacio con un salto de línea en una cadena larga para “envolver un texto”
Necesito utilizar una cadena larga como etiqueta en un gráfico de seaborn. Si utilizo la cadena larga, el área de trazado efectiva se reduce, por lo que quiero envolver las líneas, como se muestra a continuación:
Lo que quiero hacer es tomar una cadena larga, por ejemplo:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.'
y cada n
caracteres (por ejemplo, 30), buscar un espacio y reemplazarlo con un carácter de nueva línea \n
. De esta manera obtengo:
'Lorem ipsum dolor sit amet, consectetur\nadipiscing elit, sed do eiusmod\ntempor incididunt ut labore et\ndolore magna aliqua.'
He logrado crear una función recursiva:
def string_for_plot(raw_str:str, n:int = 30):
a_indx = raw_str.find(' ',n)
if a_indx > 0:
return raw_str[:a_indx] + '\n' + string_for_plot(raw_str[a_indx+1:], n=n)
elif a_indx == -1:
return raw_str
Esto funciona perfectamente bien, pero me preguntaba si puedo usar un método más eficiente o más pythonico para hacer esto (por ejemplo, expresiones regulares, alguna otra función de cadena de la que no estoy al tanto).
davy.ai
Para envolver líneas en una cadena larga cada
n
caracteres manteniendo las palabras juntas, una forma más eficiente y pythonica es usar el módulotextwrap
en Python.Aquí tienes un ejemplo:
Salida:
La función
textwrap.fill()
envuelve automáticamente las líneas de una cadena para que quepan dentro de un ancho especificado (n
caracteres en este caso), asegurándose de que las palabras no se dividan a la mitad.Puedes ajustar el parámetro
width
para cambiar el número de caracteres por línea.