Formatação de Strings em Python
As operações de formatação descritas aqui (operador %) exibem uma variedade de peculiaridades que levam a um número de erros comuns [...]. Usar os mais novos literais de string formatados [...] ajuda a evitar esses erros. Essas alternativas também fornecem abordagens mais poderosas, flexíveis e extensíveis para formatar texto.
operador %
Prefira Literais de String
Para código novo, o uso de str.format, ou literais de string formatados (Python 3.6+) em vez do operador % é fortemente recomendado.
# operador %: formatação de string estilo antigo (não recomendado para código novo)
name = 'Pete'
'Hello %s' % name # %s = placeholder de string
"Hello Pete"
Podemos usar o especificador de formato %d para converter um valor int em uma string:
num = 5
'I have %d apples' % num
"I have 5 apples"
str.format
O Python 3 introduziu uma nova maneira de fazer formatação de strings que foi posteriormente retroportada para o Python 2.7. Isso torna a sintaxe para formatação de strings mais regular.
# método str.format(): formatação de string moderna (Python 2.7+)
name = 'John'
age = 20
"Hello I'm {}, my age is {}".format(name, age) # {} = placeholder
"Hello I'm John, my age is 20"
"Hello I'm {0}, my age is {1}".format(name, age)
"Hello I'm John, my age is 20"
Literais de String Formatados ou f-Strings
Se você estiver usando Python 3.6+, as f-Strings de string são a maneira recomendada de formatar strings.
Um literal de string formatado ou f-string é um literal de string que é prefixado com f ou F. Essas strings podem conter campos de substituição, que são expressões delimitadas por chaves {}. Embora outros literais de string sempre tenham um valor constante, as strings formatadas são realmente expressões avaliadas em tempo de execução.
# f-string: maneira recomendada de formatar strings (Python 3.6+)
name = 'Elizabeth'
f'Hello {name}!' # prefixo f permite expressões em {}
'Hello Elizabeth!'
Faça login para responder este quiz e acompanhar seu progresso de aprendizagem
fmtf ou FformatstrÉ até possível fazer aritmética em linha com isso:
# f-strings suportam expressões: podem incluir cálculos dentro de {}
a = 5
b = 10
f'Five plus ten is {a + b} and not {2 * (a + b)}.' # Avalia expressões
'Five plus ten is 15 and not 30.'
f-Strings de Múltiplas Linhas
name = 'Robert'
messages = 12
(
f'Hi, {name}. '
f'You have {messages} unread messages'
)
'Hi, Robert. You have 12 unread messages'
O especificador =
Isso imprimirá a expressão e seu valor:
# especificador =: imprime o nome da variável e o valor (Python 3.8+)
from datetime import datetime
now = datetime.now().strftime("%b/%d/%Y - %H:%M:%S")
f'date and time: {now=}' # Imprime "now='Nov/14/2022 - 20:50:01'"
"date and time: now='Nov/14/2022 - 20:50:01'"
Adicionando espaços ou caracteres
name = 'Robert'
f"{name.upper() = :-^20}"
'name.upper() = -------ROBERT-------'
f"{name.upper() = :^20}"
'name.upper() = ROBERT '
f"{name.upper() = :20}"
'name.upper() = ROBERT '
Formatação de Dígitos
Adicionando separador de milhares
a = 10000000
f"{a:,}"
'10,000,000'
Arredondamento
a = 3.1415926
f"{a:.2f}"
'3.14'
Faça login para responder este quiz e acompanhar seu progresso de aprendizagem
f"{a:.2f}" faz?Exibindo como Porcentagem
a = 0.816562
f"{a:.2%}"
'81.66%'
Tabela de formatação de números
| Número | Formato | Saída | Descrição |
|---|---|---|---|
| 3.1415926 | {:.2f} | 3.14 | Formata float com 2 casas decimais |
| 3.1415926 | {:+.2f} | +3.14 | Formata float com 2 casas decimais e sinal |
| -1 | {:+.2f} | -1.00 | Formata float com 2 casas decimais e sinal |
| 2.71828 | {:.0f} | 3 | Formata float sem casas decimais |
| 4 | {:0>2d} | 04 | Preenche o número com zeros (preenchimento à esquerda, largura 2) |
| 4 | {:x<4d} | 4xxx | Preenche o número com x’s (preenchimento à direita, largura 4) |
| 10 | {:x<4d} | 10xx | Preenche o número com x’s (preenchimento à direita, largura 4) |
| 1000000 | {:,} | 1,000,000 | Formato de número com separador de vírgula |
| 0.35 | {:.2%} | 35.00% | Formata porcentagem |
| 1000000000 | {:.2e} | 1.00e+09 | Notação de expoente |
| 11 | {:11d} | 11 | Alinhado à direita (padrão, largura 10) |
| 11 | {:<11d} | 11 | Alinhado à esquerda (largura 10) |
| 11 | {:^11d} | 11 | Alinhado ao centro (largura 10) |
Template Strings
Um mecanismo mais simples e menos poderoso, mas é recomendado ao lidar com strings geradas por usuários. Devido à sua menor complexidade, as template strings são uma escolha mais segura.
from string import Template
name = 'Elizabeth'
t = Template('Hey $name!')
t.substitute(name=name)
'Hey Elizabeth!'