Saltar al contenido

Imprimir con sangría en python

No busques más por todo internet porque llegaste al espacio adecuado, poseemos la solución que necesitas pero sin liarte.

Solución:

Creo que lo que estás buscando aquí es el textwrap módulo:

user = "Username"
prefix = user + ": "
preferredWidth = 70
wrapper = textwrap.TextWrapper(initial_indent=prefix, width=preferredWidth,
                               subsequent_indent=' '*len(prefix))
message = "LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT " * 3
print wrapper.fill(message)

Esto imprime:

Username: LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT
          LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT
          LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT

Si realmente quiere usar tabulaciones en la sangría, eso es un poco más complicado, porque primero tiene que expandir tabulaciones initial_indent para averiguar el correcto subsequent_indent usar. Y, porque tu prefix Realmente termina con dos pestañas, es aún más complicado. Aquí está el más simple que he encontrado:

user = "Username"
prefix = user + ":tt"
expanded_indent = textwrap.fill(prefix+'$', replace_whitespace=False)[:-1]
subsequent_indent = ' ' * len(expanded_indent)
wrapper = textwrap.TextWrapper(initial_indent=prefix,
                               subsequent_indent=subsequent_indent)
message = "LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT " * 3
print wrapper.fill(message)

Si hace esto repetidamente, probablemente querrá envolver ese lío en una función.

Puedes usar str.ljust() para rellenar cada línea al ancho requerido así:

line_width = 20
print "Username:".ljust(line_width) + "LEFT"*6
print "".ljust(line_width) + "RIGHT"*3

El argumento al que le pasas ljust es la longitud que desea el string ser, siempre que esto sea consistente, las líneas deben alinearse correctamente.

Como alternativa, puede utilizar string multiplicación en líneas donde solo necesitas el relleno así:

print " "*line_width + "RIGHT"*3

Esto tendrá exactamente el mismo resultado que la última línea en el código anterior.

En Python 2, Sugiero usar formato para sangrar a la izquierda, por ejemplo:

print 'Username: :>40'.format('Foo')
print '          :>40'.format('FooBar')

Dará como resultado:

Username:                                      Foo
                                            FooBar

También,

print ':<30:<40'.format('UserName:','Foo')
print ':<30:<40'.format('User:','FooBar')
print ':<30:<40'.format('','FooBar42')

dará como resultado:

UserName:                     Foo                                     
User:                         FooBar                                  
                              FooBar42     

Y así...

Para Python 3, use paréntesis 🙂 Además, lo mismo se puede escribir de manera más compacta usando las cadenas f: así:

print (f"'UserName:':<30'Foo':<40")
print (f"'User:':<30'FooBar':<40")
print (f"'':<30'FooBar42':<40")

también resultará en:

UserName:                     Foo                                     
User:                         FooBar                                  
                              FooBar42     

Aquí tienes las comentarios y puntuaciones

Nos encantaría que puedieras dar recomendación a esta crónica si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *