Eu quero preencher uma string com espaços. Eu sei que o seguinte funciona para zero:
>>> print "'%06d'"%4
'000004'
Mas o que devo fazer quando quiser isso ?:
'hi '
é claro que posso medir o comprimento da corda e fazer str+" "*leftover
, mas gostaria da maneira mais curta.
python
string
string-formatting
pad
afunilar
fonte
fonte
"%-6s" % s
para alinhado à esquerda e alinhado"%6s" % s
à direita.Respostas:
Você pode fazer isso com
str.ljust(width[, fillchar])
:fonte
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étodode cordas f
fonte
'{message: <{fill}}'.format(message='Hi', fill='16')
str.format()
para modelos com apenas um{...}
e mais nada. Basta usar aformat()
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:
Se você deseja passar
16
como uma variável:Se você deseja passar variáveis para todo o kit e o kaboodle :
O que resulta em (você adivinhou):
fonte
Você pode tentar isso:
fonte
"'%+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:
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!
fonte
Use
str.ljust()
:Você também deve considerar
string.zfill()
,str.ljust()
estr.center()
para formatação string. Eles podem ser encadeados e ter o caractere ' fill ' especificado, assim: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í.fonte
No Python 3.6, você pode simplesmente fazer
com interpolação de string literal .
Ou, se o tamanho do seu preenchimento estiver em uma variável, desta forma (obrigado @Matt M.!):
fonte
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}'
.você também pode centralizar sua string:
fonte
Use a mini formatação do Python 2.7 para strings :
Esta esquerda alinha e acumula até 8 caracteres com o caractere ''.
fonte
Basta remover o 0 e ele adicionará espaço:
fonte
Não seria mais pitônico usar a fatia?
Por exemplo, para preencher uma string com espaços à direita até 10 caracteres:
Para preenchê-lo com espaços à esquerda até os 15 caracteres:
É 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.
fonte
''.join(reversed(str))
é mais pitônico questr[::-1]
, e todos sabemos que isso não é verdade.(x + " " * 10)[:10]
na minha opinião , é muito mais complicado do que usarx.ljust(10)
.Um bom truque para usar no lugar dos vários formatos de impressão:
(1) Almofada com espaços à direita:
(2) Almofada com zeros à esquerda:
fonte
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.
fonte
s = "hi"
; ems + (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).