Ich möchte eine automatische Zeichenfolgenformatierung in einer API wie folgt bereitstellen:
%Vor%kann durch die Werte von Attributen ersetzt werden, die in der Formatierungszeichenfolge aufgerufen werden.
Wie extrahiere ich die Schlüsselwortargumente aus einer Python-Format-Zeichenfolge:
%Vor% Sie können die string.Formatter()
-Klasse verwenden, um die Felder in a auszuwerten string mit der Methode Formatter.parse()
:
Demo:
%Vor% Sie können diese Feldnamen weiter analysieren; Dafür können Sie die Funktion str._formatter_field_name_split()
(Python 2) / _string.formatter_field_name_split()
(Python 3) verwenden (dieses interne Implementierungsdetail ist nicht anderweitig verfügbar; Formatter.get_field()
verwendet es intern. Diese Funktion gibt den ersten Teil des Namens zurück, der in den an str.format()
übergebenen Argumenten nachgeschlagen wird, sowie einen Generator für den Rest des Feldes.
Der Generator liefert (is_attribute, name)
Tupel; is_attribute
ist wahr, wenn der nächste Name als Attribut behandelt werden soll, false, wenn es sich um ein Element handelt, das mit obj[name]
gesucht werden soll:
Demo:
%Vor% Beachten Sie, dass diese Funktion Teil der internen Implementierungsdetails der Formatter()
-Klasse ist und ohne vorherige Ankündigung geändert oder aus Python entfernt werden kann und möglicherweise nicht einmal in anderen Python-Implementierungen verfügbar ist.
Wenn alle Platzhalter benannt sind, kann ein spezielles Wörterbuch verwendet werden, um abzufangen, auf welche Schlüssel versucht wird, auf ein Array zuzugreifen und es zu protokollieren.
%Vor% Beachten Sie, dass bei unbenannten Platzhaltern ein IndexError um .format()
(Tupelindex außerhalb des gültigen Bereichs) ausgelöst wird.
Nach Martijns Antwort ist ein einfacheres Format für die umfassende Liste, die ich verwendet habe:
%Vor%Es ist funktional genau das Gleiche, nur viel einfacher zu verdauen.
Tags und Links python string string-formatting