Как я могу напечатать буквенные фигурные скобки в строке Python, а также использовать .format на нем? - PullRequest
1209 голосов
/ 29 марта 2011
x = " \{ Hello \} {0} "
print x.format(42)

дает мне: Key Error: Hello\\

Я хочу напечатать вывод: {Hello} 42

Ответы [ 11 ]

1665 голосов
/ 29 марта 2011

Вам нужно удвоить {{ и }}:

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

Вот соответствующая часть документации Python для синтаксиса строки формата :

Строки формата содержат «замещающие поля», заключенные в фигурные скобки {}. Все, что не содержится в фигурных скобках, считается буквальным текстом, который копируется без изменений в выходные данные. Если вам нужно включить символ скобки в буквальный текст, его можно избежать путем удвоения: {{ и }}.

62 голосов
/ 29 марта 2011

Вы избежите этого, удвоив скобки.

Например:

x = "{{ Hello }} {0}"
print x.format(42)
31 голосов
/ 06 июня 2016

ОП написал этот комментарий:

Я пытался отформатировать небольшой JSON для некоторых целей, например: '{"all": false, "selected": "{}"}'.format(data), чтобы получить что-то вроде {"all": false, "selected": "1,2"}

При работе с JSON возникает проблема с "выходящими скобками".

Я предлагаю сделать это:

import json
data = "1,2"
mydict = {"all": "false", "selected": data}
json.dumps(mydict)

Это чище, чем альтернатива, а именно:

'{{"all": false, "selected": "{}"}}'.format(data)

Использование библиотеки json определенно предпочтительнее, когда строка JSON становится более сложной, чем в примере.

25 голосов
/ 29 марта 2011

Попробуйте сделать это:

x = " {{ Hello }} {0} "
print x.format(42)
24 голосов
/ 21 декабря 2017

Python 3.6+ (2017)

В последних версиях Python можно использовать f-строк (см. Также PEP498 ).

С f-строками следует использовать double {{ или }}

n = 42  
print(f" {{Hello}} {n} ")

, чтобы получить желаемое

 {Hello} 42

Если вам нужно разрешить выражениев скобках вместо буквального текста вам понадобятся три набора скобок:

hello = "HELLO"
print(f"{{{hello.lower()}}}")

производит

{hello}
22 голосов
/ 29 марта 2011

Попробуйте это:

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

15 голосов
/ 05 ноября 2015

Хотя не лучше, но для справки, вы также можете сделать это:

>>> x = '{}Hello{} {}'
>>> print x.format('{','}',42)
{Hello} 42

Это может быть полезно, например, когда кто-то хочет напечатать {argument}.Возможно, он более читабелен, чем '{{{}}}'.format('argument')

. Обратите внимание, что после Python 2,7

позиции аргументов опускаются (например, {} вместо {0}).
6 голосов
/ 30 ноября 2016

Если вы собираетесь делать это много, было бы неплохо определить вспомогательную функцию, которая позволит вам вместо этого использовать произвольные заменители скобок, например,

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

1 голос
/ 27 июня 2017

Причина в том, что {} - это синтаксис .format(), поэтому в вашем случае .format() не распознает {Hello}, поэтому возникла ошибка.

вы можете переопределить его, используя двойные фигурные скобки {{}},

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

или

попробуйте %s для форматирования текста,

x = " { Hello } %s"
print x%(42)  
0 голосов
/ 24 июня 2019

Если вам нужно сохранить две фигурные скобки в строке, вам нужно 5 фигурных скобок с каждой стороны переменной.

...