Respostas:
Você pode fazer isso com str.ljust(width[, fillchar])
:
Retorne a string justificada à esquerda em uma string de comprimento width . O preenchimento é feito usando o preenchimento especificado (o padrão é um espaço). A cadeia original será retornada se a largura for menor que
len(s)
.
>>> 'hi'.ljust(10)
'hi '
Para um método flexível que funcione mesmo ao formatar uma sequência complicada, você provavelmente deve usar o mini-idioma de formatação de sequência , usando o str.format()
método
>>> '{0: <16} StackOverflow!'.format('Hi') # Python >=2.6
'Hi StackOverflow!'
de cordas f
>>> f'{"Hi": <16} StackOverflow!' # Python >= 3.6
'Hi StackOverflow!'
'{message: <{fill}}'.format(message='Hi', fill='16')
str.format()
para modelos com apenas um {...}
e mais nada. Basta usar a format()
função e salvar-se a análise de sobrecarga: format('Hi', '<16')
.
O novo método de formato de string (ish) permite que você faça coisas divertidas com argumentos de palavras-chave aninhados. O caso mais simples:
>>> '{message: <16}'.format(message='Hi')
'Hi '
Se você deseja passar 16
como uma variável:
>>> '{message: <{width}}'.format(message='Hi', width=16)
'Hi '
Se você deseja passar variáveis para todo o kit e o kaboodle :
'{message:{fill}{align}{width}}'.format(
message='Hi',
fill=' ',
align='<',
width=16,
)
O que resulta em (você adivinhou):
'Hi '
Você pode tentar isso:
print "'%-100s'" % 'hi'
"'%+100s'" % 'hi'
iria trabalhar para colocar espaços à direita'hi'
A maneira correta de fazer isso seria usar a sintaxe de formato do Python, conforme descrito na documentação oficial
Para este caso, seria simplesmente:
'{:10}'.format('hi')
what outputs:
'hi '
Explicação:
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" | "%"
Praticamente tudo que você precisa saber está lá ^.
Atualização: a partir do python 3.6, é ainda mais conveniente com a interpolação literal de strings!
foo = 'foobar'
print(f'{foo:10} is great!')
# foobar is great!
Use str.ljust()
:
>>> 'Hi'.ljust(6)
'Hi '
Você também deve considerar string.zfill()
, str.ljust()
e str.center()
para formatação string. Eles podem ser encadeados e ter o caractere ' fill ' especificado, assim:
>>> ('3'.zfill(8) + 'blind'.rjust(8) + 'mice'.ljust(8, '.')).center(40)
' 00000003 blindmice.... '
Essas operações de formatação de string têm a vantagem de trabalhar no Python v2 e v3.
Dê uma olhada em pydoc str
algum momento: há muitas coisas boas por aí.
No Python 3.6, você pode simplesmente fazer
>>> strng = 'hi'
>>> f'{strng: <10}'
com interpolação de string literal .
Ou, se o tamanho do seu preenchimento estiver em uma variável, desta forma (obrigado @Matt M.!):
>>> to_pad = 10
>>> f'{strng: <{to_pad}}'
f'{strng: >10}'
para preenchimento de string com espaços em branco à esquerda até 10. Isso é mágico. E não está bem documentado.
f'{strng:10}'
.
Use a mini formatação do Python 2.7 para strings :
'{0: <8}'.format('123')
Esta esquerda alinha e acumula até 8 caracteres com o caractere ''.
Basta remover o 0 e ele adicionará espaço:
>>> print "'%6d'"%4
Não seria mais pitônico usar a fatia?
Por exemplo, para preencher uma string com espaços à direita até 10 caracteres:
>>> x = "string"
>>> (x + " " * 10)[:10]
'string '
Para preenchê-lo com espaços à esquerda até os 15 caracteres:
>>> (" " * 15 + x)[-15:]
' string'
É necessário saber por quanto tempo você deseja preencher, é claro, mas não requer medir o comprimento da string com a qual você está começando.
''.join(reversed(str))
é mais pitônico que str[::-1]
, e todos sabemos que isso não é verdade.
(x + " " * 10)[:10]
na minha opinião , é muito mais complicado do que usar x.ljust(10)
.
Um bom truque para usar no lugar dos vários formatos de impressão:
(1) Almofada com espaços à direita:
('hi' + ' ')[:8]
(2) Almofada com zeros à esquerda:
('0000' + str(2))[-4:]
min_len = 8
então ('hi' + ' '*min_len)[:min_len]
ou('0'*min_len + str(2))[-min_len]
('0'*min_len + str(2))[-min_len:]
melhor, embora isso seja apenas por diversão, e eu recomendo as outras respostas.
Você poderia fazê-lo usando a compreensão da lista, isso também daria uma idéia sobre o número de espaços e seria uma linha.
"hello" + " ".join([" " for x in range(1,10)])
output --> 'hello '
s = "hi"
; em s + (6-len(s)) * " "
vez disso (tudo bem quando o resultado é negativo) No entanto, respostas que usem qualquer recurso da estrutura que resolva o problema exato serão mais fáceis de manter (consulte outras respostas).
"%-6s" % s
para alinhado à esquerda e alinhado"%6s" % s
à direita.