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?
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
:En este fragmento de código, se aplica el método
textwrap.dedent()
en el f-string de varias líneas utilizando la sintaxisf"""\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.