Wie kann ich geschweiften Klammern ({}) Zeichen in einer Zeichenfolge entkommen, während ich .format (oder eine F-Zeichenfolge) verwende?

Lesezeit: 4 Minuten

Benutzeravatar von Schitti
Schitti

Nicht funktionierendes Beispiel:

print(" \{ Hello \} {0} ".format(42))

Gewünschte Ausgabe:

 {Hello} 42 

  • Siehe auch: stackoverflow.com/questions/35574349

    – dreftymac

    6. Dezember 2016 um 5:11 Uhr

  • Für diejenigen, die doppelte Zahnspangen vermeiden möchten ({{ }}), verwenden string.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


Benutzeravatar von Greg Hewgill
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

Benutzeravatar von divenex
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

Benutzeravatar von Kamil Kisiel
Kamil Kissel

Sie entkommen ihm, indem Sie die geschweiften Klammern verdoppeln.

Z.B:

x = "{{ Hello }} {0}"
print(x.format(42))

Benutzeravatar von twasbrillig
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.

Benutzeravatar von Nicoolasens
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

Benutzeravatar von pajton
pajton

Versuche dies:

x = "{{ Hello }} {0}"

Benutzeravatar von DNR
DNR

Versuchen Sie Folgendes:

x = " {{ Hello }} {0} "
print x.format(42)

1441720cookie-checkWie kann ich geschweiften Klammern ({}) Zeichen in einer Zeichenfolge entkommen, während ich .format (oder eine F-Zeichenfolge) verwende?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy