es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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:

Imagen

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

Tags:  , , ,

Answer

  1. Avatar for 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ódulo textwrap en Python.

    Aquí tienes un ejemplo:

    import textwrap
    
    raw_str = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.'
    wrapped_str = textwrap.fill(raw_str, width=30)
    
    print(wrapped_str)
    

    Salida:

    Lorem ipsum dolor sit amet,
    consectetur adipiscing elit,
    sed do eiusmod tempor
    incididunt ut labore et dolore
    magna aliqua.
    

    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.

Comments are closed.