Nicht funktionierendes Beispiel:
print(" \{ Hello \} {0} ".format(42))
Gewünschte Ausgabe:
{Hello} 42
Schitti
Nicht funktionierendes Beispiel:
print(" \{ Hello \} {0} ".format(42))
Gewünschte Ausgabe:
{Hello} 42
Greg Hewgill
Die musst du verdoppeln {{
Und }}
:
>>> x = " {{ Hello }} {0} "
>>> print(x.format(42))
' { Hello } 42 '
Hier ist der relevante Teil der Python-Dokumentation für Format-String-Syntax:
Formatstrings enthalten „Ersatzfelder“, 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 eine geschweifte Klammer in den wörtlichen Text einfügen müssen, kann sie durch Verdoppelung maskiert werden:{{
Und}}
.
Wenn Sie also “{42}” drucken möchten, verwenden Sie "{{{0}}}".format(42)
!
– Huss
24. Juli 2013 um 20:21 Uhr
Was ist, wenn Sie eine einzelne geschweifte Klammer wollen? "{ something { } {value}".format(42)
funktioniert nicht.
– AJP
2. Oktober 2013 um 10:10 Uhr
“{{“.format() und “}}”.format() geben einfache geschweifte Klammern aus. In Ihrem Beispiel: print “{{ something {{ }} {0}”.format(42) gibt “{ something { } 42” aus.
– Markus Visser
18. Oktober 2013 um 21:19 Uhr
Was bedeutet die {0}
bedeuten?
– CodyBugstein
21. Februar 2014 um 1:27 Uhr
@Imray: {0}
bezieht sich auf das erste Argument .format()
. Sie können mehr als einen Wert wie drucken {0} {1} {2}
solange Sie die gleiche Anzahl von Argumenten angeben .format()
. Sehen docs.python.org/library/string.html#format-examples für umfangreiche Beispiele.
– Greg Hewgill
21. Februar 2014 um 1:30 Uhr
divex
Python 3.6+ (2017)
In den neueren Versionen von Python würde man verwenden f-Saiten (siehe auch PEP498).
Bei f-Saiten sollte man double verwenden {{
oder }}
n = 42
print(f" {{Hello}} {n} ")
produziert das Gewünschte
{Hello} 42
Wenn Sie einen Ausdruck in Klammern auflösen müssen, anstatt wörtlichen Text zu verwenden, benötigen Sie drei Sätze von Klammern:
hello = "HELLO"
print(f"{{{hello.lower()}}}")
produziert
{hello}
Aus my_greet = "HELLO"
du kannst bekommen {hello}
als Ausgang, mit nur 2 Sätzen von Klammern, mit print(f"{ {my_greet.lower()} }")
. Lassen Sie einfach ein Leerzeichen zwischen den Klammern.
– Jahrnr
20. Juli 2020 um 7:07 Uhr
Dies sollte jetzt die akzeptierte Antwort sein, wenn Sie Python3.6+ in den Zeiten der Rona verwenden.
– Gwi7d31
20. November 2020 um 18:27 Uhr
@ Gwi7d31 Nein, F-Saiten sind kein Ersatz für str.format()
. Zum Beispiel ist diese Antwort, die ich geschrieben habe, mit F-Strings nicht möglich, da die Vorlage aus der Eingabe stammt, nicht aus dem Quellcode.
– wjandrea
20. Mai 2021 um 18:20 Uhr
@wjandrea Ihr Link bezieht sich wirklich nicht auf die OP-Frage. Das OP möchte geschweifte Klammern beibehalten, während Sie sie in Ihrer verknüpften Antwort über .format() und Ihre Wörterbuch-Entpackmethode entfernen. Wenn Sie {} in Python 3.6+ beibehalten und einen Wert in eine Zeichenfolge einfügen möchten, this is the way
. Das ist die Frage zur Hand. Ich habe auch nie gesagt, dass F-Strings ein Ersatz für .format() sind. Du hast das gesagt.
– Gwi7d31
26. Mai 2021 um 3:06 Uhr
@Gwi Was ich sagen will ist, dass es um diese Frage geht str.format()
keine F-Saiten, und sie sind nicht miteinander kompatibel.
– wjandrea
26. Mai 2021 um 3:18 Uhr
Kamil Kissel
Sie entkommen ihm, indem Sie die geschweiften Klammern verdoppeln.
Z.B:
x = "{{ Hello }} {0}"
print(x.format(42))
twasbrillig
Der OP schrieb diesen Kommentar:
Ich habe versucht, ein kleines JSON für einige Zwecke zu formatieren, wie folgt:
'{"all": false, "selected": "{}"}'.format(data)
sowas zu bekommen{"all": false, "selected": "1,2"}
Es kommt ziemlich häufig vor, dass beim Umgang mit JSON das Problem „Escapeing Brackets“ 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, nämlich:
'{{"all": false, "selected": "{}"}}'.format(data)
Verwendung der json
Bibliothek ist definitiv vorzuziehen, wenn der JSON-String komplizierter als das Beispiel wird.
Nicoolasens
Sie möchten einen String mit dem Zeichen formatieren {
oder }
Du musst sie nur verdoppeln.
Format {
mit f'{{'
Und }
mit f'}}'
So :
name = "bob"
print(f'Hello {name} ! I want to print }} and {{ or {{ }}')
Ausgang :
Hallo Bob ! Ich möchte } und { oder { } drucken
ODER für das genaue Beispiel:
number = 42
print(f'{{Hello}} {number}')
Wird gedruckt:
{Hallo} 42
pajton
Versuche dies:
x = "{{ Hello }} {0}"
DNR
Versuchen Sie Folgendes:
x = " {{ Hello }} {0} "
print x.format(42)
Siehe auch: stackoverflow.com/questions/35574349
– dreftymac
6. Dezember 2016 um 5:11 Uhr
Für diejenigen, die doppelte Zahnspangen vermeiden möchten (
{{ }}
), verwendenstring.Template
. Dort ersetzen Sie Bezeichner des Formulars$foo
(praktisch zum Generieren von LaTeX-Code).– 0 _
11. Januar 2018 um 5:51 Uhr
Für diejenigen, die doppelte Klammern vermeiden möchten und nicht abgeneigt sind, ihren Python-Projekten eine weitere Abhängigkeit hinzuzufügen, gibt es auch Jinja2, das dieses Problem definitiv löst, indem es eine benutzerdefinierte benutzerdefinierte Platzhalter-Trennzeichen-Syntax zulässt.
– dreftymac
15. Januar 2020 um 20:07 Uhr