2.19. Formatação de Strings
2.19.1. Usando o operador %
Em Python podemos usar o operador %
para realizar a formatação de strings. Nesse caso, chamamos esse operador de formatação de string ou operador de interpolação. Para compreender como ele funciona, vamos começar por um exemplo:
1>>> curso = "CAP-419/SER-347"
2>>> "Bem vindo a %s!" % curso
3'Bem vindo a CAP-419/SER-347!'
A sequência %s
, dentro da string na linha 03, possui uma interpretação especial, ela funciona como um marcador de posição (placeholder) que será substituída (ou interpolada ou expandida) pelo valor fornecido à direita do operador %
. Existe uma regra bem definida de como construir as strings de formatação [37]. Algumas bem utilizadas são:
%s
: substituição de strings.%d
: substituição de números inteiros.%f
: substituição de números em ponto flutuante.
Exemplos:
>>> idade = 25
>>> "Idade: %d" % idade
'Idade: 25'
>>> salario = 1250.34
>>> "Salario: R$ %f" % salario
'Salario: R$ 1250.340000'
>>> "Salario: R$ %.2f" % salario
'Salario: R$ 1250.34'
O exemplo acima utiliza também uma sequência especial para formatar um número em ponto flutuante, fazendo com que a parte fracionária seja limitada a dois caracteres.
Por padrão, os valores são formatados tomando o máximo de caracteres necessários para representar o conteúdo. É possível também especificar que o valor deva ser preenchido com um número fixo de caracteres (padding):
>>> '%20s' % 'teste'
' teste'
>>> '%05d' % 38
'00038'
Se mais de um valor precisar ser informado na formatação, devemos usar tuplas com exatamente o mesmo número de elementos especificados na string de formatação:
>>> plataforma = "Landsat-8"
>>> sensor = "OLI"
>>> ano = 2013
>>> "%s foi lançado em %d e possui o sensor %s" % (plataforma, ano, sensor)
'Landsat-8 foi lançado em 2013 e possui o sensor OLI'
ou, podemos utilizar um objeto que realize o mapeamento entre nome e valores, como os dicionários:
>>> instrumento = {
... "plataforma": "Landsat-8",
... "sensor": "OLI"
... }
>>> "Você está utilizando dados %(plataforma)s / %(sensor)s" % instrumento
'Você está utilizando dados Landsat-8 / OLI'
Nota
Embora o operador %
, para formatação de strings, tenha sido depreciado em favor do método format
(Seção 2.19.2), é importante saber de sua existência pois muitos scripts e programas legados utilizam esta notação.
Nota
O operador %
é semelhante ao operador sprintf()
da linguagem C.
2.19.2. Usando o método format
Sintaxe:
s.format(*args, **kwargs)
Descrição: O método
format
realiza a operação de formatação de uma strings
contendo elementos de substituição delimitados pelos caracteres{
e}
.Parâmetros:
args
: Sequência com os valores a serem usados na formatação da strings
.kwargs
: Pares de chave-valor. As ocorrências ems
de placeholders nomeados usarão valores desse parâmetro.
Retorno: Uma cópia da string
s
onde cada elemento de substituição é trocado por um valor string gerado a partir do argumento correspodente.
Exemplos:
>>> idade = 25
>>> "Idade: {}".format(idade)
'Idade: 25'
>>> salario = 1250.34
>>> "Salario: R$ {}".format(salario)
'Salario: R$ 1250.340000'
>>> "Salario: R$ {:.2f}".format(salario)
'Salario: R$ 1250.34'
O exemplo acima utiliza também uma sequencia especial para formatar um número em ponto flutuante, fazendo com que a parte fracionária seja limitada a dois caracteres.
Por padrão, os valores são formatados tomando o máximo de caracteres necessários para representar o conteúdo. É possível também especificar que o valor deva ser preenchido com um certo número fixo de caracteres (padding):
>>> '{:>20}'.format('teste')
' teste'
>>> '{:20}'.format('teste')
'teste '
>>> '{:05}'.format(38)
'00038'
Ou, fazer o truncamento:
>>> '{:.10} ...'.format('Introdução à Programação com Dados Geoespaciais')
'Introdução ...'
Podemos passar vários valores de uma única vez:
>>> plataforma = "Landsat-8"
>>> sensor = "OLI"
>>> ano = 2013
>>> "{0} foi lançado em {1} e possui o sensor {2}".format(plataforma, ano, sensor)
'Landsat-8 foi lançado em 2013 e possui o sensor OLI'
Podemos omitir a numeração dos argumentos, caso ele sejam dados na ordem:
>>> "{} foi lançado em {} e possui o sensor {}".format(plataforma, ano, sensor)
'Landsat-8 foi lançado em 2013 e possui o sensor OLI'
Também podemos utilizar argumentos posicionais (positional arguments):
>>> "O sensor {2} a bordo do satélite {0} lançado em {1}...".format(plataforma, ano, sensor)
'O sensor OLI a bordo do satélite Landsat-8 lançado em 2013...'
Ou, podemos utilizar argumentos nomeados (named keyword argument):
>>> 'Coordinates: {latitude}, {longitude}'.format(longitude='-45.88', latitude='-23.17')
'Coordinates: -23.17, -45.88'
>>> instrumento = {
... "plataforma": "Landsat-8",
... "sensor": "OLI"
... }
>>> "Você está utilizando dados {plataforma} / {sensor}".format(**instrumento)
'Você está utilizando dados Landsat-8 / OLI'
Exemplos
Vamos examinar os exemplos apresentados no manual da biblioteca padrão do Python.
Nota
Podemos especificar vários detalhes de formatação, tais como: tamanho do campo, alinhamento, padding, precisão decimal, entre outros. Iremos ver mais detalhes sobre formatação de strings à medida que avançarmos no curso.
Nota
Se você quiser usar os caracteres {
ou }
como uma string do seu texto de saída, deverá utillizar uma sequência de escape especial, dobrando esses caracteres: {{
ou }}
. Caso contrário, as marcas serão tratadas como placeholders.
Nota
A sintaxe de formatação do método format
pode ser encontrada em [22].
Nota
Um bom guia que demonstra o uso do operador %
e do método format
pode ser encontrado em [63].
2.19.3. f-string
Nota
Veja [23].