string.Formatter în Python

Șiruri de caractere Python 3.0+

Clasa din spatele lui str.format(), pe care o poți extinde ca să schimbi regulile de formatare.

Sintaxă
f = string.Formatter()
f.format(sablon, *args, **kwargs)
f.parse(sablon)

Ce face string.Formatter

Formatter implementează aceleași reguli ca str.format(), dar le expune ca metode pe care le poți suprascrie într-o subclasă: get_value() (de unde vin valorile), format_field() (cum se formatează), convert_field() (conversiile !r, !s).

Metoda parse() descompune un șablon în bucăți (text, nume_camp, format, conversie), utilă pentru a afla ce câmpuri cere un șablon.

Ce returnează

format() returnează textul formatat; parse() un iterator de tupluri.

Exemple

Exemplul 1: Câmpurile unui șablon și valori implicite

import string

sablon = "{nume} are {varsta:d} ani și locuiește în {oras}"
print([camp for _, camp, _, _ in string.Formatter().parse(sablon) if camp])

class CuImplicit(string.Formatter):
    def get_value(self, key, args, kwargs):
        return kwargs.get(key, f"<{key}?>")

print(CuImplicit().format("{nume} din {oras}", nume="Ana"))

Rezultat

['nume', 'varsta', 'oras']
Ana din <oras?>

Greșeli frecvente

  • Folosești Formatter pentru formatări obișnuite. Pentru asta ajung str.format() și f-string-urile; clasa este utilă doar când vrei reguli proprii.

Comenzi înrudite

  • str.format() și str.format_map(): Completează un șablon de text cu valori puse între acolade.
  • string.Template: Șabloane simple de text cu marcaje $nume, sigure pentru texte scrise de utilizatori.
  • format(): Formatează o singură valoare după un șablon: zecimale, aliniere, separatori, baze.