Inverter seqüências de formato no estilo C em Python (`%`)
Introdução e configuração
Suponha que eu tenha uma 'template' * string do formulário,
>>> template = """My %(pet)s ate my %(object)s.
... This is a float: %(number)0.2f.
... %(integer)10d is an integer on a newline."""
Com este modelo, posso gerar uma nova string com,
>>> d = dict(pet='dog', object='homework', number=7.7375487, integer=743898,)
>>> out_string = template % d
>>> print(out_string)
My dog ate my homework.
This is a float: 7.74.
743898 is an integer on a newline.
Que bom!
Pergunta, questãoEu gostaria de aplicartemplate
paraout_string
para produzir um novodict
. Algo como,
>>> d_approx_copy = reverse_cstyle_template(out_string, template)
>>> print(d_approx_copy)
{pet='dog', object='homework', number=7.74, integer=743898,}
Existe uma maneira pitônica de fazer isso? Já existe uma implementação? **
Notas*: Eu não estou usandoModelo porque, atualmente, o AFAIK não oferece suporterevertendo.
**: conheço oriscos associado à perda de precisão emnumber
(por7.7375487
para7.74
) Eu posso lidar com isso. Estou apenas procurando uma maneira simples de fazer isso.