Quiero completar una cadena con espacios. Sé que lo siguiente funciona para ceros:
>>> print "'%06d'"%4
'000004'
Pero, ¿qué debo hacer cuando quiero esto ?:
'hi '
por supuesto que puedo medir la longitud de la cuerda y hacer str+" "*leftover
, pero me gustaría el camino más corto
python
string
string-formatting
pad
cirio
fuente
fuente
"%-6s" % s
alineado a la izquierda y alineado"%6s" % s
a la derecha.Respuestas:
Puedes hacer esto con
str.ljust(width[, fillchar])
:fuente
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étodode cuerdas f
fuente
'{message: <{fill}}'.format(message='Hi', fill='16')
str.format()
para plantillas con solo una{...}
y nada más. Sólo tiene que utilizar laformat()
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:
Si desea pasar
16
como una variable:Si desea pasar variables para todo el kit y kaboodle :
Lo que resulta en (lo has adivinado):
fuente
Puedes probar esto:
fuente
"'%+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:
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!
fuente
Uso
str.ljust()
:También debe considerar
string.zfill()
,str.ljust()
ystr.center()
para el formato de cadena. Estos se pueden encadenar y tener el carácter ' relleno ' especificado, por lo tanto: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í.fuente
A partir de Python 3.6 solo puedes hacer
con interpolación literal de cadenas .
O, si el tamaño de su relleno está en una variable, como esta (¡gracias @Matt M.!):
fuente
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}'
.También puedes centrar tu cadena:
fuente
Utilice el mini formato de Python 2.7 para cadenas :
Esto se alinea a la izquierda y se ajusta a 8 caracteres con el carácter ''.
fuente
Simplemente elimine el 0 y agregará espacio en su lugar:
fuente
¿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:
Para rellenarlo con espacios a la izquierda hasta que tenga 15 caracteres de longitud:
Requiere saber cuánto tiempo desea rellenar, por supuesto, pero no requiere medir la longitud de la cadena con la que está comenzando.
fuente
''.join(reversed(str))
es más pitónico questr[::-1]
, y todos sabemos que eso no es cierto.(x + " " * 10)[:10]
en mi opinión , es mucho más complicado que usarlox.ljust(10)
.Un buen truco para usar en lugar de los diversos formatos de impresión:
(1) Almohadilla con espacios a la derecha:
(2) Almohadilla con ceros a la izquierda:
fuente
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.
fuente
s = "hi"
; ens + (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).