reemplazar - ¿Cómo puedo imprimir caracteres literales en una cadena de python y también usar.format?
python separar string por caracter (10)
Aunque no es mejor, solo para la referencia, también puede hacer esto:
>>> x = ''{}Hello{} {}''
>>> print x.format(''{'',''}'',42)
{Hello} 42
Puede ser útil, por ejemplo, cuando alguien quiere imprimir {argument}
. Es quizás más legible que ''{{{}}}''.format(''argument'')
Tenga en cuenta que omite posiciones de argumentos (por ejemplo, {}
lugar de {0}
) después de Python 2.7
x = " /{ Hello /} {0} "
print x.format(42)
me da: Key Error: Hello//
Quiero imprimir la salida: {Hello} 42
El OP escribió este comentario:
I was trying to format a small JSON for some purposes, like this: ''{"all": false, "selected": "{}"}''.format(data) to get something like {"all": false, "selected": "1,2"}
Es bastante común que surja el problema de "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)
Usar la biblioteca json
es definitivamente preferible cuando la cadena JSON se complica más que el ejemplo.
Intenta hacer esto:
x = " {{ Hello }} {0} "
print x.format(42)
La razón es, {}
es la sintaxis de .format()
por lo que en su caso .format()
no reconoce {Hello}
por lo que arrojó un error.
puede anularlo utilizando llaves dobles {{}},
x = " {{ Hello }} {0} "
o
intente %s
para el formato de texto,
x = " { Hello } %s"
print x%(42)
Necesitas doblar 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 cadenas de formato :
Las cadenas de formato contienen "campos de reemplazo" rodeados por llaves
{}
. Cualquier cosa que no esté contenida entre llaves se considera texto literal, que se copia sin cambios a la salida. Si necesita incluir un carácter de refuerzo en el texto literal, se puede escapar duplicando:{{
y}}
.
Prueba esto:
x = "{{ Hello }} {0}"
Se te escapa doblando los tirantes.
P.ej:
x = "{{ Hello }} {0}"
print x.format(42)
Si tiene que poner llaves alrededor de un valor de una clave de los diccionarios de parámetros o listas del método de formato, intente lo siguiente:
>>> "{o}Hello {a}{c}".format(**{"o":"{","c":"}","a":42})
''{Hello 42}''
Si va a hacer esto mucho, podría ser bueno definir una función de utilidad que le permita usar sustitutos de llaves arbitrarios, como
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}''
Tenga en cuenta que esto funcionará ya sea que los corchetes sean una cadena de longitud 2 o una iterable de dos cadenas (para delimitadores de múltiples caracteres).
Python 3.6+ (2017)
En las versiones recientes de Python, se usarían f-strings (ver también PEP498 ).
Con f-strings se debe usar el 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}