Как я могу печатать литеральные символы фигурной скобки в строке 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, либо с итерацией двух строк (для многозначных разделителей).