chitti
Ejemplo no funcional:
print(" \{ Hello \} {0} ".format(42))
Salida deseada:
{Hello} 42
greg hewgill
Necesitas duplicar el {{
y }}
:
>>> x = " {{ Hello }} {0} "
>>> print(x.format(42))
' { Hello } 42 '
Aquí está la parte relevante de la Documentación de Python para la sintaxis de cadena de formato:
Las cadenas de formato contienen “campos de reemplazo” rodeados de llaves
{}
. Cualquier cosa que no esté entre llaves se considera texto literal, que se copia sin cambios en la salida. Si necesita incluir un carácter de llave en el texto literal, se puede evitar duplicando:{{
y}}
.
-
Entonces, si desea imprimir “{42}”, usaría
"{{{0}}}".format(42)
!– abrazos
24 de julio de 2013 a las 20:21
-
¿Qué pasa si quieres una sola llave?
"{ something { } {value}".format(42)
no funciona– AJP
2 oct 2013 a las 10:10
-
“{{“.format() y “}}”.format() imprimen llaves simples. En tu ejemplo: imprime “{{ algo {{ }} {0}”. format(42) imprimirá “{ algo { } 42”.
–Mark Visser
18/10/2013 a las 21:19
-
Lo que hace el
{0}
¿significar?– Cody Bugstein
21 de febrero de 2014 a las 1:27
-
@Imray:
{0}
se refiere al primer argumento de.format()
. Puede imprimir más de un valor como{0} {1} {2}
siempre y cuando le des el mismo número de argumentos a.format()
. Ver docs.python.org/library/string.html#format-examples para ejemplos extensos.– Greg Hewgill
21 de febrero de 2014 a las 1:30
Divenex
Pitón 3.6+ (2017)
En las versiones recientes de Python se usaría cuerdas f (ver también PEP498).
Con f-strings uno debe usar doble {{
o }}
n = 42
print(f" {{Hello}} {n} ")
produce lo deseado
{Hello} 42
Si necesita resolver una expresión entre corchetes en lugar de usar texto literal, necesitará tres conjuntos de corchetes:
hello = "HELLO"
print(f"{{{hello.lower()}}}")
produce
{hello}
-
De
my_greet = "HELLO"
puedes obtener{hello}
como salida, usando solo 2 juegos de corchetes, conprint(f"{ {my_greet.lower()} }")
. Solo deja un espacio entre paréntesis.– año
20 de julio de 2020 a las 7:07
-
Esta debería ser ahora la respuesta aceptada si está utilizando Python3.6+ en los tiempos de la rona.
– Gwi7d31
20 de noviembre de 2020 a las 18:27
-
@ Gwi7d31 No, las cuerdas f no son un reemplazo para
str.format()
. Por ejemplo, esta respuesta que escribí no es posible con f-strings ya que la plantilla proviene de la entrada, no del código fuente.– wjandrea
20 mayo 2021 a las 18:20
-
@wjandrea su enlace realmente no pertenece a la pregunta de OP. El OP quiere mantener las llaves mientras las elimina en su respuesta vinculada a través de .format() y el método de desempaquetado de su diccionario. Si desea conservar {} en Python 3.6+ y desea insertar un valor en una cadena,
this is the way
. Esa es la pregunta en cuestión. Tampoco dije que f-strings son un reemplazo para .format(). Tú dijiste eso.– Gwi7d31
26 de mayo de 2021 a las 3:06
-
@Gwi Lo que digo es que esta pregunta es sobre
str.format()
no f-strings, y no son compatibles entre sí.– wjandrea
26 de mayo de 2021 a las 3:18
kamil kisiel
Lo escapas doblando las llaves.
P.ej:
x = "{{ Hello }} {0}"
print(x.format(42))
twasbrillig
El OP escribió este comentario:
Estaba tratando de formatear un JSON pequeño para algunos propósitos, como este:
'{"all": false, "selected": "{}"}'.format(data)
para obtener algo como{"all": false, "selected": "1,2"}
Es bastante común que surja el problema de las “llaves de escape” cuando se trata de JSON.
Sugiero hacer esto:
import json
data = "1,2"
mydict = {"all": "false", "selected": data}
json.dumps(mydict)
Es más limpio que la alternativa, que es:
'{{"all": false, "selected": "{}"}}'.format(data)
Utilizando el json
La biblioteca es definitivamente preferible cuando la cadena JSON se vuelve más complicada que el ejemplo.
Nicoolasen
Desea formatear una cadena con el carácter {
o }
Solo tienes que duplicarlos.
formato {
con f'{{'
y }
con f'}}'
Entonces :
name = "bob"
print(f'Hello {name} ! I want to print }} and {{ or {{ }}')
Producción :
Hola Bob ! Quiero imprimir } y { o { }
O para el ejemplo exacto:
number = 42
print(f'{{Hello}} {number}')
Imprimirá:
{Hola} 42
pajtón
Prueba esto:
x = "{{ Hello }} {0}"
DNR
Intenta hacer esto:
x = " {{ Hello }} {0} "
print x.format(42)
Consulte también: stackoverflow.com/questions/35574349
– drftymac
6 de diciembre de 2016 a las 5:11
Para aquellos que quieren evitar la duplicación de llaves (
{{ }}
), utilizarstring.Template
. Ahí se sustituyen identificadores de la forma$foo
(útil para generar código LaTeX).– 0 _
11 de enero de 2018 a las 5:51
Para aquellos que quieren evitar la duplicación de llaves, y que no son reacios a agregar otra dependencia a sus proyectos de Python, también está Jinja2 que resuelve definitivamente este problema, al permitir la sintaxis de delimitador de marcador de posición personalizada definida por el usuario.
– drftymac
15 de enero de 2020 a las 20:07