Introdução à Formatação de Strings
A partir do Python 2.7 e consolidado nas versões 3.x, o método format() surgiu como uma alternativa robusta e flexível ao operador de módulo (%) para formatação de strings. Ele utiliza chaves {} e dois pontos : para definir como os valores devem ser inseridos e estilizados no texto.
- Preenchimento Sequencial Padrão
Quando nenhum índice ou nome é especificado dentro das chaves, o método format() insere os argumentos na exata ordem em que são fornecidos.
linguagem = 'Python'
ferramenta = 'Automação'
mensagem = '{} é excelente para {}.'.format(linguagem, ferramenta)
print(mensagem) # Saída: Python é excelente para Automação.
- Definição de Índices Posicionais
É possível controlar a ordem de inserção passando os índices numéricos dos argumentos. O índice 0 refere-se ao primeiro argumento, 1 ao segundo, e assim por diante. Isso também permite a reutilização do mesmo argumento.
fruta = 'Maçã'
cor = 'Vermelha'
descricao = 'A {0} tem a cor {1}. Gosto muito de {0}.'.format(fruta, cor)
print(descricao)
# Saída: A Maçã tem a cor Vermelha. Gosto muito de Maçã.
- Uso de Argumentos Nomeados (Keywords)
Em vez de posições, você pode utilizar nomes (chaves) para mapear os valores, o que torna o código mais legível, especialmente em strings complexas.
modelo = 'Sedan'
marca = 'Toyota'
# Usando nomes exatos das variáveis
info_carro = '{modelo} da {marca}'.format(modelo=modelo, marca=marca)
print(info_carro)
# Usando nomes arbitrários para as chaves
detalhes = 'Veículo: {tipo} | Fabricante: {fabricante}'.format(tipo=modelo, fabricante=marca)
print(detalhes)
- Controle de Casas Decimais
Para números de ponto flutuante, o formato :.Nf permite limitar a quanitdade de casas decimais exibidas, onde N é o número desejado.
preco = 45.6789
print('{:.1f}'.format(preco)) # 1 casa decimal: 45.7
print('{:.2f}'.format(preco)) # 2 casas decimais: 45.68
print('{:.3f}'.format(preco)) # 3 casas decimais: 45.679
taxa_negativa = -12.3456
print('{:.2f}'.format(taxa_negativa)) # Saída: -12.35
- Alinhamento Central com Preenchimento
O caractere ^ é usado para centralizar o texto dentro de um espaço definido. Você pode especificar um caractere de preenchimento logo antes do ^.
palavra = 'Dados'
# Centralizado em 10 espaços, preenchido com hifens
print('{:-^10}'.format(palavra)) # Saída: --Dados---
# Centralizado em 11 espaços, preenchido com asteriscos
print('{:*^11}'.format(palavra)) # Saída: ***Dados***
- Alinhamento à Esquerda
O símbolo < alinha o conteúdo à esquerda, preenchendo o espaço restante à direita com o caractere escolhido (ou espaço por padrão).
item = 'Celular'
# Alinhado à esquerda em 12 caracteres, preenchido com pontos
print('{:.<12}'.format(item)) # Saída: Celular.....
# Alinhado à esquerda em 10 caracteres, preenchido com zeros
print('{:0<10}'.format(item)) # Saída: Celular000
- Alinhamento à Direita
O símbolo > realiza o alinhamento à direita, adicionando o preenchimento à esquerda do texto.
codigo = 'ID'
# Alinhado à direita em 8 espaços, com underline
print('{:_>8}'.format(codigo)) # Saída: ______ID
# Alinhado à direita em 6 espaços, com zeros
print('{:0>6}'.format(codigo)) # Saída: 0000ID
- Formatação de Porcentagem
O modificador % multiplica o número por 100 e adiciona o símbolo de porcentagem. É possível combinar com a definição de casas decimais.
conversao = 0.8452
print('{:%}'.format(conversao)) # Padrão (6 casas): 84.520000%
print('{:.1%}'.format(conversao)) # 1 casa decimal: 84.5%
print('{:.2%}'.format(conversao)) # 2 casas decimais: 84.52%
- Notação Científica (Exponencial)
Para exibir números muito grandes ou muito pequenos, utilize o e (minúsculo) ou E (maiúsculo) para notação científica.
distancia = 384400000
print('{:e}'.format(distancia)) # Padrão: 3.844000e+08
print('{:.2e}'.format(distancia)) # 2 casas: 3.84e+08
print('{:.1E}'.format(distancia)) # 1 casa, E maiúsculo: 3.8E+08
- Conversão de Bases Numéricas
O método format() facilita a conversão e exibição de inteiros em diferentes bases (binária, octal, hexadecimal).
valor = 255
print('Binário: {:b}'.format(valor)) # 11111111
print('Octal: {:o}'.format(valor)) # 377
print('Hexadecimal (min): {:x}'.format(valor)) # ff
print('Hexadecimal (mai): {:X}'.format(valor)) # FF
print('Decimal: {:d}'.format(valor)) # 255
- Escape de Chaves Literais
Se você precisar exibir chaves literais na string final, basta duplicá-las ({{ e }}) para que o interpretador não as trate como campos de formatação.
nome_var = 'resultado'
texto = 'A variável {{{}}} armazena o valor final.'.format(nome_var)
print(texto)
# Saída: A variável {resultado} armazena o valor final.
- Interpolação com f-strings (Python 3.6+)
Introduzidas no Python 3.6, as f-strings oferecem uma sintaxe mais concisa e direta, avaliando as expresssões dentro das chaves em tempo de execução.
usuario = 'Admin'
nivel_acesso = 5
# Prefixando a string com 'f' ou 'F'
mensagem_acesso = f'Usuário {usuario} possui nível de acesso {nivel_acesso}.'
print(mensagem_acesso)
# Também suporta as mesmas regras de formatação
pi = 3.14159265
print(f'Valor de Pi aproximado: {pi:.3f}')