Respuestas:
Puedes hacer esto con str.ljust(width[, fillchar])
:
Devuelve la cadena justificada a la izquierda en una cadena de largo ancho . El relleno se realiza utilizando el fillchar especificado (el valor predeterminado es un espacio). La cadena original se devuelve si el ancho es menor que
len(s)
.
>>> 'hi'.ljust(10)
'hi '
Para un método flexible que funciona incluso cuando formatea cadenas complicadas, probablemente debería usar el mini-lenguaje de formateo de cadenas , ya sea usando el str.format()
método
>>> '{0: <16} StackOverflow!'.format('Hi') # Python >=2.6
'Hi StackOverflow!'
de cuerdas f
>>> f'{"Hi": <16} StackOverflow!' # Python >= 3.6
'Hi StackOverflow!'
'{message: <{fill}}'.format(message='Hi', fill='16')
str.format()
para plantillas con solo una {...}
y nada más. Sólo tiene que utilizar la format()
función y ahorrarse el análisis de gastos generales: format('Hi', '<16')
.
El nuevo método de formato de cadena (ish) le permite hacer algunas cosas divertidas con argumentos de palabras clave anidadas. El caso más simple:
>>> '{message: <16}'.format(message='Hi')
'Hi '
Si desea pasar 16
como una variable:
>>> '{message: <{width}}'.format(message='Hi', width=16)
'Hi '
Si desea pasar variables para todo el kit y kaboodle :
'{message:{fill}{align}{width}}'.format(
message='Hi',
fill=' ',
align='<',
width=16,
)
Lo que resulta en (lo has adivinado):
'Hi '
Puedes probar esto:
print "'%-100s'" % 'hi'
"'%+100s'" % 'hi'
funcionaría para poner espacios a la derecha de'hi'
La forma correcta de hacerlo sería utilizar la sintaxis de formato de Python como se describe en la documentación oficial
Para este caso, simplemente sería:
'{:10}'.format('hi')
qué salidas:
'hi '
Explicación:
format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type]
fill ::= <any character>
align ::= "<" | ">" | "=" | "^"
sign ::= "+" | "-" | " "
width ::= integer
precision ::= integer
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
Casi todo lo que necesitas saber está ahí ^.
Actualización: a partir de python 3.6, ¡es aún más conveniente con interpolación de cadenas literales!
foo = 'foobar'
print(f'{foo:10} is great!')
# foobar is great!
Uso str.ljust()
:
>>> 'Hi'.ljust(6)
'Hi '
También debe considerar string.zfill()
, str.ljust()
y str.center()
para el formato de cadena. Estos se pueden encadenar y tener el carácter ' relleno ' especificado, por lo tanto:
>>> ('3'.zfill(8) + 'blind'.rjust(8) + 'mice'.ljust(8, '.')).center(40)
' 00000003 blindmice.... '
Estas operaciones de formateo de cadenas tienen la ventaja de trabajar en Python v2 y v3.
Echa un vistazo a pydoc str
alguna vez: hay una gran cantidad de cosas buenas allí.
A partir de Python 3.6 solo puedes hacer
>>> strng = 'hi'
>>> f'{strng: <10}'
con interpolación literal de cadenas .
O, si el tamaño de su relleno está en una variable, como esta (¡gracias @Matt M.!):
>>> to_pad = 10
>>> f'{strng: <{to_pad}}'
f'{strng: >10}'
para llenar una cuerda con espacios en blanco iniciales hasta una longitud de 10. Eso es mágico. Y no está bien documentado.
f'{strng:10}'
.
Utilice el mini formato de Python 2.7 para cadenas :
'{0: <8}'.format('123')
Esto se alinea a la izquierda y se ajusta a 8 caracteres con el carácter ''.
Simplemente elimine el 0 y agregará espacio en su lugar:
>>> print "'%6d'"%4
¿No sería más pitónico usar rebanado?
Por ejemplo, para rellenar una cadena con espacios a la derecha hasta que tenga 10 caracteres de longitud:
>>> x = "string"
>>> (x + " " * 10)[:10]
'string '
Para rellenarlo con espacios a la izquierda hasta que tenga 15 caracteres de longitud:
>>> (" " * 15 + x)[-15:]
' string'
Requiere saber cuánto tiempo desea rellenar, por supuesto, pero no requiere medir la longitud de la cadena con la que está comenzando.
''.join(reversed(str))
es más pitónico que str[::-1]
, y todos sabemos que eso no es cierto.
(x + " " * 10)[:10]
en mi opinión , es mucho más complicado que usarlo x.ljust(10)
.
Un buen truco para usar en lugar de los diversos formatos de impresión:
(1) Almohadilla con espacios a la derecha:
('hi' + ' ')[:8]
(2) Almohadilla con ceros a la izquierda:
('0000' + str(2))[-4:]
min_len = 8
entonces ('hi' + ' '*min_len)[:min_len]
o('0'*min_len + str(2))[-min_len]
('0'*min_len + str(2))[-min_len:]
más bien, aunque esto es solo por diversión, y recomiendo las otras respuestas.
Podrías hacerlo usando la comprensión de la lista, esto también te daría una idea sobre el número de espacios y sería una respuesta.
"hello" + " ".join([" " for x in range(1,10)])
output --> 'hello '
s = "hi"
; en s + (6-len(s)) * " "
cambio (está bien cuando el resultado es negativo). Sin embargo, las respuestas que usan cualquier característica del marco que aborde el problema exacto serán más fáciles de mantener (ver otras respuestas).
"%-6s" % s
alineado a la izquierda y alineado"%6s" % s
a la derecha.