Python: formatação de strings

Autor: @britodfbr

Operador buildin %

Uma boa forma para se trabalhar com formatação de string é str % var.

Exemplos:

a, b, c, d = 'Fulano da Silva', 20, '123.456.789-00', 1.78
print('Nome: %s Idade: %i CPF: %s Altura: %f' % (a,b,c, d))

As variáveis dentro da string possuem a representação conforme tabela abaixo, mais detalhes na documentação oficial:

  • %s: string
  • %d: decimal
  • %i: integer
  • %f: float
  • %F: float
  • %o: octal
  • %x: hexadecimal lowercase
  • %X: hexadecimal uppercase
  • %c: char (aceita inteiro, ou string simples)
  • %r: converte qualquer objeto Python com repr()
  • %s: converte qualquer objeto Python com str()
  • %a: converte qualquer objeto Python com ascii()
  • %e: float exponential lowercase
  • %E: float exponential uppercase
  • %g: float exponential lowercase precisão menor -4
  • %G: float exponential uppercase precisão menor -4

Este método em Python3 realiza casting automático para strings, como no exemplo abaixo:

a, b, c, d = 'Fulano da Silva', 20, '123.456.789-00', 1.78
print('Nome: %s Idade: %s CPF: %s Altura: %s' % (a,b,c, d))

E permite formatar a apresentação e arredondamentos numericos.

a, b, c, d = 'Fulano da Silva', 20, '123.456.789-00', 1.78
print('Nome: %s Idade: %03d CPF: %s Altura: %.1f' % (a,b,c, d))

também permite nomear os parametros através de dicionários.


x = {'nome': 'Fulano da Silva', 'idade': 20, 
     'cpf': '123.456.789-00', 'altura': 1.78}
print('Nome: %(nome)s Idade: %(idade)05d CPF: %(cpf)s Altura: %(altura).3f' % x)

Se for necessário pode-se utilizar o mesmo parametro sem repetições.

x = {'nome': 'Fulano da Silva', 'idade': 20, 
     'cpf': '123.456.789-00', 'altura': 1.78}
print('Nome: %(altura)s Idade: %(altura)05d CPF: %(altura)s Altura: %(altura).3f' % x)

Também pode-se aproveitar das estruturas de dados.

t = ('Fulano da Silva', 20, '123.456.789-00', 1.78)

print('Nome: %s Idade: %03i CPF: %s Altura: %.03f' % t)

Método str.format

Também pode-se usar o método str.format() para formatação, porque ele converte automaticamente para string os dados que são passados para ele.

Um exemplo básico de uso, seria:

a, b, c = 'Fulano da Silva', 20, '123.456.789-00'
print('Nome: {} Idade: {} CPF: {}'.format(a,b,c))

As chaves são substituídos pelos objetos passados para o método str.format(), respeitando a ordem dos parâmetros.

Quando se tem muitos campos para concatenar, pode ser interessante "numerar" estes parâmetros, como no exemplo abaixo:

a, b, c = 'Fulano da Silva', 20, '123.456.789-00'
print('Nome: {2} Idade: {1} CPF: {0}'.format(c,b,a))

Aqui {0} será substituído pelo primeiro parâmetro do método e assim sucessivamente (lembrando que você não precisa colocar os campos de formatação em ordem, assim como no exemplo.

Outra forma interessante de usar este método, principalmente quando se tem muitos campos para formatar, é usar os parâmetros com nomes ao invés de números, como por exemplo:

a, b, c = 'Fulano da Silva', 20, '123.456.789-00'
print('Nome: {nome} Idade: {idade} CPF: {cpf}'.format(nome = a, idade = b, cpf = c))

Também pode-se aproveitar das estruturas de dados.

t = ('Fulano da Silva', 20, '123.456.789-00', 1.78)

print('Nome: {} Idade: {} CPF: {} Altura: {}'.format(*t))

Se for necessário pode-se utilizar o mesmo parametro sem repetições.

a, b, c, d = 'Fulano da Silva', 20, '123.456.789-00', 1.78
t = ('Fulano da Silva', 20, '123.456.789-00', 1.78)

print('Nome: {3} Idade: {3} CPF: {3} Altura: {3}'.format(a,b,c,d))
print('Nome: {3} Idade: {3} CPF: {3} Altura: {3}'.format(*t))
print('Nome: {altura} Idade: {altura} CPF: {altura}'.format(nome = a, idade = b, cpf = c, altura = d))

E permite formatar o alinhamento e arredondamentos decimais.

t = ('Fulano da Silva', 20, '123.456.789-00', 1.7862)
a, b, c, d = t

print('Nome: {} Idade: {:5} CPF: {} Altura: {:.2}'.format(*t))
print('Nome: {} Idade: {:5} CPF: {} Altura: {:.2}'.format(a,b,c,d))
print('Nome: {nome} Idade: {idade} Altura: {altura:.4}'.format(nome = a, idade = b, cpf = c, altura = d))
print('CPF: {2} Idade: {1:5}  Altura: {3:2.2}'.format(*t))
print('CPF: {2} Idade: {1:5}  Altura: {3:2.4}'.format(a,b,c,d))
print('CPF: {cpf} Idade: {idade:5} Altura: {altura:3.3}'.format(nome = a, idade = b, cpf = c, altura = d))

Referência

https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting

http://turing.com.br/pydoc/2.7/tutorial/inputoutput.html

https://docs.python.org/2/library/string.html#format-string-syntax

https://docs.python.org/2/library/stdtypes.html#string-formatting-operations

https://pt.stackoverflow.com/questions/82733/como-concatenar-multiplas-strings-em-python

Comentários