x = " \{ Hello \} {0} "
print(x.format(42))
나에게 준다 : Key Error: Hello\\
출력을 인쇄하고 싶습니다. {Hello} 42
x = " \{ Hello \} {0} "
print(x.format(42))
나에게 준다 : Key Error: Hello\\
출력을 인쇄하고 싶습니다. {Hello} 42
답변:
{{
and 를 두 배로 늘려야합니다 }}
.
>>> x = " {{ Hello }} {0} "
>>> print(x.format(42))
' { Hello } 42 '
형식 문자열 구문에 대한 Python 설명서 의 관련 부분은 다음과 같습니다 .
형식 문자열에는 중괄호로 묶인“대체 필드”가 포함됩니다
{}
. 중괄호에 포함되지 않은 것은 리터럴 텍스트로 간주되며 변경되지 않은 채 출력으로 복사됩니다. 리터럴 텍스트에 중괄호 문자를 포함해야하는 경우 :{{
및 을 두 번 사용하여 이스케이프 처리 할 수 있습니다}}
.
"{{{0}}}".format(42)
!
"{ something { } {value}".format(42)
작동하지 않습니다.
{0}
뜻입니까?
{0}
의 첫 번째 인수를 나타냅니다 .format()
. {0} {1} {2}
에 동일한 개수의 인수를 제공하는 한 하나 이상의 값을 인쇄 할 수 있습니다 .format()
. 광범위한 예제는 docs.python.org/library/string.html#format-examples 를 참조하십시오 .
파이썬 3.6 이상 (2017)
최신 버전의 Python에서는 f-string을 사용합니다 ( PEP498 참조 ).
f-string을 사용하면 double {{
또는}}
n = 42
print(f" {{Hello}} {n} ")
원하는 생산
{Hello} 42
리터럴 텍스트를 사용하는 대신 대괄호로 표현을 해결해야하는 경우 세 가지 대괄호 세트가 필요합니다.
hello = "HELLO"
print(f"{{{hello.lower()}}}")
생산
{hello}
OP는이 의견을 썼습니다.
나는 작은 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 문자열이 예제보다 복잡해지면 라이브러리를 사용하는 것이 좋습니다.
이 작업을 많이 수행하려면 다음과 같이 임의의 중괄호 대체를 사용할 수있는 유틸리티 함수를 정의하는 것이 좋습니다.
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 인 문자열이거나 두 개의 문자열을 반복 할 수있는 경우 (다 문자 구분 기호의 경우)에서 작동합니다.
미리 형식이 지정된 JSON에 문자열을 삽입하고 싶었 기 때문에 최근 에이 문제가 발생했습니다. 내 솔루션은 다음과 같은 도우미 메서드를 만드는 것입니다.
def preformat(msg):
""" allow {{key}} to be used for formatting in text
that already uses curly braces. First switch this into
something else, replace curlies with double curlies, and then
switch back to regular braces
"""
msg = msg.replace('{{', '<<<').replace('}}', '>>>')
msg = msg.replace('{', '{{').replace('}', '}}')
msg = msg.replace('<<<', '{').replace('>>>', '}')
return msg
그런 다음 다음과 같은 작업을 수행 할 수 있습니다.
formatted = preformat("""
{
"foo": "{{bar}}"
}""").format(bar="gas")
성능에 문제가없는 경우 작업을 수행합니다.
이유는 {}
의 구문 .format()
이므로 .format()
인식하지 못 {Hello}
하므로 오류가 발생했습니다.
이중 중괄호 {{}}를 사용하여이를 대체 할 수 있습니다.
x = " {{ Hello }} {0} "
또는
%s
텍스트 형식을 시도하십시오 .
x = " { Hello } %s"
print x%(42)
텍스트를 인쇄하려고 할 때이 문제를 발견하여 붙여 넣기를 라텍스 문서에 복사 할 수 있습니다. 이 답변을 확장하고 명명 된 대체 필드를 사용합니다.
다음과 같은 색인을 사용하여 여러 변수의 곱을 인쇄하고 싶다고 가정 해 보겠습니다
. Latex에서 $A_{ 0042 }*A_{ 3141 }*A_{ 2718 }*A_{ 0042 }$
다음 코드는 명명 된 필드를 사용하여 많은 색인에 대해 읽기 가능한 상태로 작업을 수행합니다.
idx_mapping = {'i1':42, 'i2':3141, 'i3':2178 }
print('$A_{{ {i1:04d} }} * A_{{ {i2:04d} }} * A_{{ {i3:04d} }} * A_{{ {i1:04d} }}$'.format(**idx_mapping))
중괄호 를 하나만 인쇄 하려면 (예 :) {
사용할 {{
수 있으며 원하는 경우 나중에 문자열에 더 많은 중괄호를 추가 할 수 있습니다. 예를 들면 다음과 같습니다.
>>> f'{{ there is a curly brace on the left. Oh, and 1 + 1 is {1 + 1}'
'{ there is a curly brace on the left. Oh, and 1 + 1 is 2'
문자열 앞에 따옴표없이 문자 'r'을 추가하여 원시 문자열 방법을 사용 하여이 작업을 수행 할 수 있습니다.
# to print '{I am inside braces}'
print(r'{I am inside braces}')
\{I am inside braces\}
.