x = " \{ Hello \} {0} "
print x.format(42)
gibt mir: Key Error: Hello\\
Ich möchte die Ausgabe drucken: {Hello} 42
Sie müssen den {{
und den }}
verdoppeln:
>>> x = " {{ Hello }} {0} "
>>> print x.format(42)
' { Hello } 42 '
Hier ist der relevante Teil der Python-Dokumentation für die Format-String-Syntax :
Formatstrings enthalten "Ersetzungsfelder", die von geschweiften Klammern
{}
umgeben sind. Alles, was nicht in geschweiften Klammern steht, wird als wörtlicher Text betrachtet, der unverändert in die Ausgabe kopiert wird. Wenn Sie ein Klammerzeichen in den Literaltext einfügen müssen, können Sie es durch Verdoppeln von:{{
und}}
maskieren.
Sie können dem entkommen, indem Sie die Zahnspange verdoppeln.
Z.B:
x = "{{ Hello }} {0}"
print x.format(42)
Das OP schrieb diesen Kommentar:
Ich habe versucht, einen kleinen JSON-Code für einige Zwecke zu formatieren:
'{"all": false, "selected": "{}"}'.format(data)
, um so etwas wie{"all": false, "selected": "1,2"}
zu erhalten.
Es kommt ziemlich häufig vor, dass beim Umgang mit JSON das Problem "Escape-Klammern" auftritt.
Ich schlage vor, dies zu tun:
import json
data = "1,2"
mydict = {"all": "false", "selected": data}
json.dumps(mydict)
Es ist sauberer als die Alternative:
'{{"all": false, "selected": "{}"}}'.format(data)
Die Verwendung der Bibliothek json
ist auf jeden Fall vorzuziehen, wenn der JSON-String komplizierter als das Beispiel wird.
Python 3.6+ (2017)
In den neueren Versionen von Python würde man f-Strings verwenden (siehe auch PEP498 ).
Bei f-Strings sollte man double {{
oder }}
verwenden
n = 42
print(f" {{Hello}} {n} ")
produziert das gewünschte
{Hello} 42
Wenn Sie einen Ausdruck in Klammern auflösen müssen, anstatt Literaltext zu verwenden, benötigen Sie drei Sätze von Klammern:
hello = "HELLO"
print(f"{{{hello.lower()}}}")
produziert
{hello}
Versuchen Sie Folgendes:
x = " {{ Hello }} {0} "
print x.format(42)
Versuche dies:
x = "{{ Hello }} {0}"
Obwohl es nicht besser ist, nur als Referenz, können Sie dies auch tun:
>>> x = '{}Hello{} {}'
>>> print x.format('{','}',42)
{Hello} 42
Dies kann beispielsweise nützlich sein, wenn jemand {argument}
drucken möchte. Es ist möglicherweise lesbarer als '{{{}}}'.format('argument')
Beachten Sie, dass Sie Argumentpositionen (z. B. {}
anstelle von {0}
) nach Python 2.7 weglassen
Wenn Sie dies häufig tun, ist es möglicherweise sinnvoll, eine Utility-Funktion zu definieren, mit der Sie stattdessen beliebige Klammerersatzzeichen verwenden können, z
def custom_format(string, brackets, *args, **kwargs):
if len(brackets) != 2:
raise ValueError('Expected two brackets. Got {}.'.format(len(brackets)))
padded = string.replace('{', '{{').replace('}', '}}')
substituted = padded.replace(brackets[0], '{').replace(brackets[1], '}')
formatted = substituted.format(*args, **kwargs)
return formatted
>>> custom_format('{{[cmd]} process 1}', brackets='[]', cmd='firefox.exe')
'{{firefox.exe} process 1}'
Beachten Sie, dass dies entweder mit Klammern funktioniert, die eine Zeichenfolge der Länge 2 oder eine Iteration von zwei Zeichenfolgen sind (für Trennzeichen mit mehreren Zeichen).
Der Grund ist, dass {}
die Syntax von .format()
ist, also erkennt .format()
in Ihrem Fall {Hello}
nicht und warf einen Fehler aus.
sie können es überschreiben, indem Sie doppelte geschweifte Klammern {{}} verwenden.
x = " {{ Hello }} {0} "
oder
versuchen Sie %s
für die Textformatierung,
x = " { Hello } %s"
print x%(42)
Wenn Sie zwei geschweifte Klammern in der Zeichenfolge behalten müssen, benötigen Sie 5 geschweifte Klammern auf jeder Seite der Variablen.
>>> myvar = 'test'
>>> "{{{{{0}}}}}".format(myvar)
'{{test}}'
Sie können String.Template()
verwenden:
from string import Template
s = Template('$txt, $num')
s.substitute(txt='{Hello}', num='42 ')