Как я могу печатать литеральные символы фигурной скобки в строке python, а также использовать.формат на нем?
x = " { Hello } {0} "
print x.format(42)
дает мне : Key Error: Hello
Я хочу распечатать вывод:{Hello} 42
10 ответов
вам нужно удвоить {{
и }}
:
>>> x = " {{ Hello }} {0} "
>>> print x.format(42)
' { Hello } 42 '
вот соответствующая часть документация Python для синтаксиса строки формата:
строки формата содержат "поля замены", окруженные фигурными скобками
{}
. Все, что не содержится в фигурных скобках, считается буквальным текстом,который копируется без изменений в вывод. Если вам нужно включить символ скобки в буквальный текст, его можно экранировать путем удвоения:{{
и}}
.
ОП написал этот комментарий:
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"}
довольно часто возникает проблема "escaping braces" при работе с JSON.
Я предлагаю делать это:
import json
data = "1,2"
mydict = {"all": "false", "selected": data}
json.dumps(mydict)
это чище, чем альтернатива, которая:
'{{"all": false, "selected": "{}"}}'.format(data)
С помощью json
библиотека определенно предпочтительнее, когда строка JSON становится более сложной, чем пример.
Python 3.6+ (2017)
в последних версиях Python можно было бы использовать f-strings (см. Также PEP498).
С f-строками следует использовать double {{
или }}
n = 42
print(f" {{Hello}} {n} ")
производит нужные
{Hello} 42
Если вам нужно разрешить выражение в скобках вместо использования буквального текста, вам понадобятся три набора скобок:
hello = "HELLO"
print(f"{{{hello.lower()}}}")
производит
{hello}
хотя не лучше, просто для справки, вы также можете сделать это:
>>> x = '{}Hello{} {}'
>>> print x.format('{','}',42)
{Hello} 42
Это может быть полезно, например, когда кто-то хочет напечатать {argument}
. Это может быть более читаемым, чем '{{{}}}'.format('argument')
обратите внимание, что вы опускаете позиции аргументов (например,{}
вместо {0}
) после Python 2.7
Если вы собираетесь делать это много, было бы неплохо определить функцию полезности, которая позволит вам использовать произвольные заменители скобок, например
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}'
обратите внимание, что это будет работать либо с скобками, являющимися строкой длины 2, либо с итерацией двух строк (для многосимвольных разделителей).
причина в том,{}
синтаксис .format()
Так что в вашем случае .format()
не признает {Hello}
таким образом, это вызвало ошибку.
вы можете переопределить его, используя двойные фигурные скобки {{}},
x = " {{ Hello }} {0} "
или
попробовать %s
для форматирования текста
x = " { Hello } %s"
print x%(42)
Если вам нужно поставить фигурные скобки вокруг значения ключа словарей параметров или списков метода format, попробуйте следующее:
>>> "{o}Hello {a}{c}".format(**{"o":"{","c":"}","a":42})
'{Hello 42}'