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.

La sangría aparece en la cadena de salida cuando se divide en varias líneas.

Tengo una f-string grande y la estoy dividiendo (ver abajo) para mejorar la legibilidad del código. Pero cuando la imprimo (imprimiéndola en un archivo, que es un objeto String.IO), cada línea nueva (excepto la primera) incluye una sangría, lo cual no quiero (mi IDE es vscode). Sin embargo, si tomo la misma f-string y la introduzco en el intérprete de Python (REPL), el output es correcto.


def foo():
ml.append(f"""
#define {ip}{mtype}{secname}{fieldname}_MASK (MASK({H},{L}))
#define {ip}
{mtype}{secname}{fieldname}_START_BIT ({fieldsb})\n""")

El archivo de salida se parece a esto:

define QMMEMCBTIRDY_LENGTH (0x40) //bien

    #define QM_MEM_CBTIRDY_DATA_MASK (GENMASK(31,0))       //mal (sangría)
    #define QM_MEM_CBTIRDY_DATA_START_BIT (0)

He arreglado el problema quitando la sangría entre cada línea nueva (pero esto es un poco feo ya que las cadenas con el mismo nivel de definición de función tienen una sangría similar y esto es feo):


def foo():
ml.append(f"""
#define {ip}{mtype}{secname}{fieldname}_MASK (MASK({H},{L}))
#define {ip}
{mtype}{secname}{fieldname}_START_BIT ({fieldsb})\n""")

El output final se ve así:

define {ip}{mtype}{secname}{fieldname}MASK (MASK({H},{L}))

define {ip}{mtype}{secname}{fieldname}START_BIT ({fieldsb})

¿Cómo puedo quitar estas sangrías del string final?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Una posible solución es usar el método textwrap.dedent() en Python para eliminar automáticamente cualquier espacio en blanco común al principio de cada línea en la cadena.

    Aquí hay un ejemplo de cómo usar el módulo textwrap:

    import textwrap
    
    def foo():
        ml.append(textwrap.dedent(f"""
            #define {ip}_{mtype}_{secname}_{fieldname}_MASK (MASK({H},{L}))
            #define {ip}_{mtype}_{secname}_{fieldname}_START_BIT ({fieldsb})
        """))
    

    En este fragmento de código, se aplica el método textwrap.dedent() en el f-string de varias líneas utilizando la sintaxis f"""\n...\n""". Esto eliminará cualquier espacio en blanco común de la cadena, asegurando que la cadena de salida no tenga ningún carácter de indentación.

Comments are closed.