Formatação de Strings em Python

PythonBeginner
Pratique Agora

Introdução

Bem-vindo ao laboratório de Formatação de Strings em Python. Formatar strings adequadamente é uma tarefa fundamental em qualquer linguagem de programação, utilizada para tudo, desde simples instruções print até a geração de relatórios complexos e páginas web. Python oferece várias maneiras de formatar strings, cada uma com suas próprias vantagens e casos de uso.

Neste laboratório, você explorará a evolução da formatação de strings em Python. Você começará com o operador tradicional %, passará para o método mais flexível str.format(). Você também dominará as f-Strings, a abordagem moderna e recomendada introduzida no Python 3.6, e aprenderá a formatar números de forma eficaz. Finalmente, você descobrirá as strings Template, uma opção segura para lidar com templates provenientes de fontes não confiáveis.

Ao final deste laboratório, você terá uma compreensão abrangente de como escolher e usar a técnica de formatação de strings correta para seus projetos em Python.

Usando o operador %

Nesta etapa, você aprenderá sobre a formatação de strings estilo antigo usando o operador %. Este método, herdado da função printf do C, utiliza especificadores de formato como %s para strings e %d para inteiros para inserir valores em uma string.

Embora este método funcione, ele possui algumas peculiaridades e é menos flexível do que as alternativas modernas. Para código novo, é fortemente recomendado usar f-Strings ou str.format().

Nota: Se você não está familiarizado com o uso do WebIDE (semelhante ao VS Code), aprenda primeiro neste laboratório.

Primeiro, abra o arquivo step1.py no explorador de arquivos à esquerda.

Agora, adicione o seguinte código a step1.py para ver como formatar uma string e um inteiro.

## Operador %: formatação de string estilo antigo (não recomendado para código novo)
name = 'Pete'
print('Hello %s' % name)  ## %s = placeholder para string

num = 5
print('I have %d apples' % num) ## %d = placeholder para inteiro

Salve o arquivo e execute-o a partir do terminal para ver a saída.

python3 step1.py

Você deverá ver a seguinte saída, onde %s foi substituído pelo valor de name e %d pelo valor de num.

Hello Pete
I have 5 apples

Usando str.format

Nesta etapa, você explorará o método str.format(), que foi introduzido no Python 3 (e retroportado para o 2.7) como uma maneira mais poderosa e flexível de formatar strings. Este método usa chaves {} como espaços reservados (placeholders).

Você pode passar argumentos para format() e eles serão inseridos nos espaços reservados na ordem. Você também pode usar números dentro das chaves para se referir aos argumentos pela sua posição.

Abra o arquivo step2.py no explorador de arquivos.

Adicione o seguinte código a step2.py. O primeiro exemplo usa chaves vazias e o segundo usa argumentos posicionais.

## str.format() method: modern string formatting (Python 2.7+)
name = 'John'
age = 20

## Arguments are inserted in order
print("Hello I'm {}, my age is {}".format(name, age))

## Arguments are inserted based on position
print("Hello I'm {0}, my age is {1}".format(name, age))

Salve o arquivo e execute-o no terminal.

python3 step2.py

Ambas as instruções print produzirão o mesmo resultado, demonstrando as duas maneiras de usar str.format().

Hello I'm John, my age is 20
Hello I'm John, my age is 20

Literais de String Formatadas ou f-Strings

Nesta etapa, você dominará as f-Strings, a maneira recomendada de formatar strings no Python 3.6 e versões mais recentes. Uma f-String é um literal de string prefixado com f ou F. Essas strings permitem incorporar expressões Python diretamente nelas, delimitadas por chaves {}.

As f-Strings são avaliadas em tempo de execução, tornando-as não apenas concisas e legíveis, mas também muito poderosas.

Abra o arquivo step3.py no explorador de arquivos.

Sintaxe Básica e Expressões

Primeiro, vamos ver a sintaxe básica e como incorporar expressões. Adicione o seguinte código a step3.py.

## f-string: recommended way to format strings (Python 3.6+)
name = 'Elizabeth'
print(f'Hello {name}!')  ## f prefix allows expressions in {}

## f-strings support expressions: can include calculations inside {}
a = 5
b = 10
print(f'Five plus ten is {a + b} and not {2 * (a + b)}.')

f-Strings de Múltiplas Linhas

Você também pode criar strings de múltiplas linhas envolvendo a f-String entre parênteses. Adicione este exemplo a step3.py.

name = 'Robert'
messages = 12
multiline_string = (
    f'Hi, {name}. '
    f'You have {messages} unread messages'
)
print(multiline_string)

O especificador = para Debugging

A partir do Python 3.8, você pode usar o especificador = para imprimir automaticamente tanto uma expressão quanto seu valor, o que é muito útil para depuração (debugging). Adicione este trecho final de código a step3.py.

## = specifier: prints both variable name and value (Python 3.8+)
from datetime import datetime
now = datetime.now().strftime("%b/%d/%Y - %H:%M:%S")
print(f'date and time: {now=}')

Agora, salve o arquivo e execute-o no terminal.

python3 step3.py

Você verá a saída de todos os três exemplos. Observe que a data e a hora na sua saída serão diferentes.

Hello Elizabeth!
Five plus ten is 15 and not 30.
Hi, Robert. You have 12 unread messages
date and time: now='...'

Formatando Dígitos

Nesta etapa, você aprenderá a formatar dados numéricos dentro das f-Strings. Este é um recurso poderoso para apresentar dados em um formato legível por humanos. Abordaremos a adição de separadores de milhares, o arredondamento de números de ponto flutuante (floats) e a exibição de números como porcentagens.

Abra o arquivo step4.py no explorador de arquivos.

Adicione o seguinte código a step4.py para praticar diferentes técnicas de formatação de números.

## Adding thousands separator
a = 10000000
print(f"Number with separators: {a:,}")

## Rounding a float to 2 decimal places
b = 3.1415926
print(f"Rounded number: {b:.2f}")

## Showing a number as a percentage with 2 decimal places
c = 0.816562
print(f"As a percentage: {c:.2%}")

Cada especificador de formato segue os dois pontos : dentro das chaves.

  • :, adiciona uma vírgula como separador de milhares.
  • :.2f formata o número como um float com duas casas decimais.
  • :.2% multiplica o número por 100 e o exibe como uma porcentagem com duas casas decimais.

Salve o arquivo e execute-o no terminal.

python3 step4.py

Sua saída deve ser parecida com esta:

Number with separators: 10,000,000
Rounded number: 3.14
As a percentage: 81.66%

Para sua referência, aqui está uma tabela com mais opções de formatação de números disponíveis nas f-Strings:

Número Formato Saída Descrição
3.1415926 {:.2f} 3.14 Formata float com 2 casas decimais
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 exponencial

Usando Strings Template

Nesta etapa, você aprenderá sobre as strings Template do módulo embutido string do Python. Embora menos poderosas que as f-Strings, elas são uma escolha mais segura ao lidar com templates de strings que podem ser gerados por usuários. Sua complexidade reduzida impede a execução de código arbitrário, o que pode ser um risco de segurança com métodos como str.format() se não forem usados com cuidado.

As strings Template usam o cifrão $ para marcar espaços reservados (placeholders) (ex: $name).

Abra o arquivo step5.py no explorador de arquivos.

Adicione o seguinte código a step5.py. Você precisará importar a classe Template, criar um objeto template e, em seguida, usar o método substitute() para inserir valores.

from string import Template

name = 'Elizabeth'

## Create a Template object
t = Template('Hey $name!')

## Use the substitute() method to replace the placeholder
result = t.substitute(name=name)
print(result)

O método substitute() aceita argumentos de palavra-chave (keyword arguments) onde as chaves correspondem aos nomes dos espaços reservados no template.

Salve o arquivo e execute-o no terminal.

python3 step5.py

A saída mostrará a string substituída.

Hey Elizabeth!

Resumo

Parabéns por concluir o laboratório de Formatação de Strings em Python!

Neste laboratório, você explorou os principais métodos para formatar strings em Python. Você aprendeu sobre:

  • O operador %: A formatação antiga no estilo C, que não é mais recomendada para código novo.
  • O método str.format(): Um método mais poderoso e flexível que utiliza espaços reservados {}.
  • f-Strings: A abordagem moderna, concisa e altamente recomendada para Python 3.6+, que permite incorporar expressões diretamente nas strings.
  • Formatação de Números: Como usar especificadores de formato (format specifiers) dentro de f-Strings para controlar a apresentação de números, incluindo separadores, precisão e porcentagens.
  • Strings Template: Um mecanismo mais simples e seguro para substituição de strings, ideal para lidar com templates de fontes externas ou não confiáveis.

Ao entender os pontos fortes e fracos de cada método, você agora pode escolher a ferramenta mais apropriada para qualquer tarefa de formatação de strings que encontrar em sua jornada de programação Python.