x = " \{ Hello \} {0} " print(x.format(42))
나에게 제공합니다 : Key Error: Hello\\
출력을 인쇄하고 싶습니다: {Hello} 42
질문자 :Schitti
x = " \{ Hello \} {0} " print(x.format(42))
나에게 제공합니다 : Key Error: Hello\\
출력을 인쇄하고 싶습니다: {Hello} 42
{{
및 }}
를 두 배로 늘려야 합니다.
>>> x = " {{ Hello }} {0} " >>> print(x.format(42)) ' { Hello } 42 '
다음은 형식 문자열 구문에 대한 Python 문서 의 관련 부분입니다.
{}
둘러싸인 "교체 필드"가 포함됩니다. 중괄호에 포함되지 않은 모든 것은 리터럴 텍스트로 간주되며 변경되지 않은 상태로 출력에 복사됩니다. 리터럴 텍스트에 중괄호 문자를 포함해야 하는 경우{{
및}}
두 배로 이스케이프할 수 있습니다.
파이썬 3.6 이상(2017)
최신 버전의 Python에서는 f-문자열을 사용합니다 ( PEP498 참조).
f-문자열을 사용하면 이중 {{
또는 }}
n = 42 print(f" {{Hello}} {n} ")
원하는 생산
{Hello} 42
리터럴 텍스트를 사용하는 대신 대괄호 안의 표현식을 해결해야 하는 경우 세 개의 대괄호 세트가 필요합니다.
hello = "HELLO" print(f"{{{hello.lower()}}}")
생산하다
{hello}
중괄호를 두 배로 하여 탈출합니다.
예:
x = "{{ Hello }} {0}" print(x.format(42))
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
라이브러리를 사용하는 것이 확실히 좋습니다.
다음을 시도하십시오.
x = " {{ Hello }} {0} " print x.format(42)
이 시도:
x = "{{ Hello }} {0}"
더 좋지는 않지만 참고용으로 다음과 같이 할 수도 있습니다.
>>> x = '{}Hello{} {}' >>> print x.format('{','}',42) {Hello} 42
{argument}
를 인쇄하려고 할 때 유용할 수 있습니다. '{{{}}}'.format('argument')
보다 더 읽기 쉽습니다.
당신이 인수 위치를 생략합니다 (예 : {}
대신 {0}
) 후 파이썬 2.7
문자열에 2개의 중괄호를 유지해야 하는 경우 변수의 양쪽에 5개의 중괄호가 필요합니다.
>>> myvar = 'test' >>> "{{{{{0}}}}}".format(myvar) '{{test}}'
이 작업을 많이 수행하려면 다음과 같이 임의의 중괄호 대체를 대신 사용할 수 있는 유틸리티 함수를 정의하는 것이 좋습니다.
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")
성능이 문제가 아닌 경우 작업을 완료합니다.
fstring 값 삽입을 방지하기 위해 이중 {{ }}를 사용했습니다.
예를 들어, 배열을 캡처하기 위해 {} 표현식을 사용하는 정수 배열 열을 업데이트하는 Postgres UPDATE 문은 다음과 같습니다.
포트 = '{100,200,300}'
fstrings와 함께,
ports = [1,2,3] query = f""" UPDATE table SET ports = '{{{ports}}}' WHERE id = 1 """
실제 쿼리 문은 다음과 같습니다.
UPDATE table SET ports = '{1,2,3}'
유효한 포스트그레스 진술입니다
중괄호의 한 면만 인쇄하려면 다음을 수행하십시오.
a=3 print(f'{"{"}{a}') >>> {3
f-magic을 적용하려는 문자열 부분에만 f-문자열을 사용하고 리터럴이고 '안전하지 않은' 특수 문자를 포함할 수 있는 모든 것에 일반(멍청한) 문자열을 사용하여 중괄호를 두 배로 늘리는 것을 피할 수 있습니다. 문자. 여러 문자열을 함께 쌓아서 파이썬이 문자열 결합을 수행하도록 하십시오.
number = 42 print(" { Hello }" f" {number} " "{ thanks for all the fish }") ### OUTPUT: { Hello } 42 { thanks for all the fish }
참고: 문자열 사이의 줄 바꿈은 필요하지 않습니다. 가독성을 위해서만 추가했습니다. 아래와 같이 위의 코드를 작성할 수도 있습니다.
⚠️ 경고: 눈을 다칠 수 있습니다!
print("{Hello}"f"{number}""{thanks for all the fish}")
이유는 {}
.format()
의 구문이므로 귀하의 경우에는 .format()
{Hello}
인식하지 못하여 오류가 발생했기 때문입니다.
이중 중괄호 {{}}를 사용하여 재정의할 수 있습니다.
x = " {{ Hello }} {0} "
또는
텍스트 형식을 지정하려면 %s
를) 시도하십시오.
x = " { Hello } %s" print x%(42)
나는 이 파티에 엄청나게 늦었다. 다음과 같이 대체 요소에 대괄호를 성공적으로 배치하고 있습니다.
print('{0} {1}'.format('{hello}', '{world}'))
어떤 인쇄
{hello} {world}
엄밀히 말하면 이것은 형식 문자열에서 중괄호를 원하기 때문에 OP가 요구하는 것이 아니지만 누군가에게 도움이 될 수 있습니다.
"따옴표 벽"을 사용하여 형식이 지정된 문자열 부분을 일반 문자열 부분과 구분할 수 있습니다.
에서:
print(f"{Hello} {42}")
에게
print("{Hello}"f" {42}")
더 명확한 예는
string = 10 print(f"{string} {word}")
산출:
NameError: name 'word' is not defined
이제 다음과 같이 견적 벽을 추가하십시오.
string = 10 print(f"{string}"" {word}")
산출:
10 {word}
나는 텍스트를 인쇄하려고 할 때 이 문제를 우연히 발견했는데, 복사하여 Latex 문서에 붙여넣을 수 있습니다. 이 답변을 확장하고 명명된 대체 필드를 사용합니다.
다음과 같은 인덱스가 있는 여러 변수의 곱을 인쇄하려고 한다고 가정해 보겠습니다. , 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'
형식을 지정할 수 있는 f-문자열 템플릿 내에서 중괄호가 필요한 경우 f-문자열에 대한 중괄호 세트 내에서 두 개의 중괄호를 포함하는 문자열을 출력해야 합니다.
css_template = f"{{tag}} {'{{'} margin: 0; padding: 0;{'}}'}" for_p = css_template.format(tag="p") # 'p { margin: 0; padding: 0;}'
아니면 브래킷 자체를 매개변수화합니까? 아마도 매우 장황할 것입니다.
x = '{open_bracket}42{close_bracket}'.format(open_bracket='{', close_bracket='}') print(x) # {42}
코드 문자열을 보간하려고 할 때 Python의 모든 기능을 갖춘 템플릿 엔진인 jinja2를 사용하는 것이 좋습니다. 예:
from jinja2 import Template foo = Template(''' #include <stdio.h> void main() { printf("hello universe number {{number}}"); } ''') for i in range(2): print(foo.render(number=i))
따라서 다른 답변이 제안하는 것처럼 중괄호를 복제하도록 강요되지 않습니다.
문자열 앞에 따옴표 없이 문자 'r'을 추가하기만 하면 원시 문자열 방법을 사용하여 이 작업을 수행할 수 있습니다.
# to print '{I am inside braces}' print(r'{I am inside braces}')
이스케이프 시퀀스를 사용하여 f-문자열에서 중괄호를 이스케이프하십시오. 예: 인쇄(f'{a={1}}')
출처 : http:www.stackoverflow.com/questions/5466451/how-can-i-print-literal-curly-brace-characters-in-a-string-and-also-use-format