Eu tenho uma string que se parece '%s in %s'
e quero saber como separar os argumentos para que sejam dois% s diferentes. Minha mente vinda de Java surgiu com isso:
'%s in %s' % unicode(self.author), unicode(self.publication)
Mas isso não funciona, então como fica em Python?
'{} in {}'
string de formato simples .Se você estiver usando mais de um argumento, ele deverá estar em uma tupla (observe os parênteses extras):
Como a EOL aponta, a
unicode()
função geralmente assume a codificação ASCII como padrão; portanto, se você tiver caracteres não ASCII, é mais seguro transmitir explicitamente a codificação:E a partir do Python 3.0, é preferível usar a
str.format()
sintaxe:fonte
Em um objeto de tupla / mapeamento para vários argumentos
format
A seguir, trecho da documentação:
Referências
Em
str.format
vez de%
Uma alternativa mais nova ao
%
operador é usarstr.format
. Aqui está um trecho da documentação:Referências
str.format
- sintaxeExemplos
Aqui estão alguns exemplos de uso:
Veja também
fonte
'{self.author} in {self.publication}'.format(self=self)
deveria "funcionar". Só não tenho certeza sobre aunicode
coisa toda .{first[0]}
para obter a inicialJ
.Você deve apenas colocar os valores entre parênteses:
Aqui, pela primeira vez,
%s
ounicode(self.author)
será colocado. E para o segundo%s
, ounicode(self.publication)
será usado.fonte
%s
em vezformat
Há um problema significativo com algumas das respostas postadas até agora:
unicode()
decodifica a codificação padrão, que geralmente é ASCII; de fato,unicode()
tenta "dar sentido" aos bytes dados, convertendo-os em caracteres. Portanto, o código a seguir, que é essencialmente o recomendado pelas respostas anteriores, falha na minha máquina:dá:
A falha vem do fato de
author
não conter apenas bytes ASCII (ou seja, com valores em [0; 127]) eunicode()
decodificar a partir de ASCII por padrão (em muitas máquinas).Uma solução robusta é fornecer explicitamente a codificação usada em seus campos; tomando UTF-8 como exemplo:
(ou sem a inicial
u
, dependendo se você deseja um resultado Unicode ou uma sequência de bytes).Nesse ponto, convém considerar que os campos
author
epublication
sejam cadeias Unicode, em vez de decodificá-las durante a formatação.fonte
Para python2, você também pode fazer isso
o que é útil se você tiver muitos argumentos para substituir (principalmente se estiver fazendo internacionalização)
Suporta Python2.6 em diante
.format()
fonte
Você também pode usá-lo limpo e simples (mas errado! Porque você deve usar
format
como Mark Byers disse) fazendo:fonte
Para completar, no python, 3,6-f-string são introduzidos no PEP-498 . Essas cadeias tornam possível
Isso significaria que, no seu exemplo, você também poderia usar:
fonte