etc./StackOverFlow

문자열에 리터럴 중괄호 문자를 인쇄하고 .format을 사용하려면 어떻게 해야 합니까?

청렴결백한 만능 재주꾼 2021. 12. 26. 04:07
반응형

질문자 :Schitti


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

나에게 제공합니다 : Key Error: Hello\\

출력을 인쇄하고 싶습니다: {Hello} 42



{{}} 를 두 배로 늘려야 합니다.

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

다음은 형식 문자열 구문에 대한 Python 문서 의 관련 부분입니다.

{} 둘러싸인 "교체 필드"가 포함됩니다. 중괄호에 포함되지 않은 모든 것은 리터럴 텍스트로 간주되며 변경되지 않은 상태로 출력에 복사됩니다. 리터럴 텍스트에 중괄호 문자를 포함해야 하는 경우 {{}} 두 배로 이스케이프할 수 있습니다.


Greg Hewgill

파이썬 3.6 이상(2017)

최신 버전의 Python에서는 f-문자열을 사용합니다 ( PEP498 참조).

f-문자열을 사용하면 이중 {{ 또는 }}

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

원하는 생산

 {Hello} 42

리터럴 텍스트를 사용하는 대신 대괄호 안의 표현식을 해결해야 하는 경우 세 개의 대괄호 세트가 필요합니다.

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

생산하다

 {hello}

divenex

중괄호를 두 배로 하여 탈출합니다.

예:

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

Kamil Kisiel

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 라이브러리를 사용하는 것이 확실히 좋습니다.


twasbrillig

다음을 시도하십시오.

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

DNR

이 시도:

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


pajton

더 좋지는 않지만 참고용으로 다음과 같이 할 수도 있습니다.

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

{argument} 를 인쇄하려고 할 때 유용할 수 있습니다. '{{{}}}'.format('argument') 보다 더 읽기 쉽습니다.

당신이 인수 위치를 생략합니다 (예 : {} 대신 {0} ) 후 파이썬 2.7


George Aprilis

문자열에 2개의 중괄호를 유지해야 하는 경우 변수의 양쪽에 5개의 중괄호가 필요합니다.

 >>> myvar = 'test' >>> "{{{{{0}}}}}".format(myvar) '{{test}}'

Richard

이 작업을 많이 수행하려면 다음과 같이 임의의 중괄호 대체를 대신 사용할 수 있는 유틸리티 함수를 정의하는 것이 좋습니다.

 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인 문자열 또는 두 문자열의 반복 가능(다중 문자 구분 기호의 경우)인 대괄호와 함께 작동합니다.


tvt173

나는 미리 형식이 지정된 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")

성능이 문제가 아닌 경우 작업을 완료합니다.


Kristján Valur

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}'

유효한 포스트그레스 진술입니다


perfecto25

중괄호의 한 면만 인쇄하려면 다음을 수행하십시오.

 a=3 print(f'{"{"}{a}') >>> {3

DalyaG

f-문자열(파이썬 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}")

ccpizza

이유는 {} .format() 의 구문이므로 귀하의 경우에는 .format() {Hello} 인식하지 못하여 오류가 발생했기 때문입니다.

이중 중괄호 {{}}를 사용하여 재정의할 수 있습니다.

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

또는

텍스트 형식을 지정하려면 %s 를) 시도하십시오.

 x = " { Hello } %s" print x%(42)

Mohideen bin Mohammed

나는 이 파티에 엄청나게 늦었다. 다음과 같이 대체 요소에 대괄호를 성공적으로 배치하고 있습니다.

 print('{0} {1}'.format('{hello}', '{world}'))

어떤 인쇄

 {hello} {world}

엄밀히 말하면 이것은 형식 문자열에서 중괄호를 원하기 때문에 OP가 요구하는 것이 아니지만 누군가에게 도움이 될 수 있습니다.


Puddles

"따옴표 벽"을 사용하여 형식이 지정된 문자열 부분을 일반 문자열 부분과 구분할 수 있습니다.

에서:

 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}

Ann Zen

나는 텍스트를 인쇄하려고 할 때 이 문제를 우연히 발견했는데, 복사하여 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))

v.tralala

중괄호 하나만 인쇄하려면(예: { ) {{ 를 사용할 수 있으며 원하는 경우 나중에 문자열에 더 많은 중괄호를 추가할 수 있습니다. 예를 들어:

 >>> 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'

Luis Cabrera Benito

형식을 지정할 수 있는 f-문자열 템플릿 내에서 중괄호가 필요한 경우 f-문자열에 대한 중괄호 세트 내에서 두 개의 중괄호를 포함하는 문자열을 출력해야 합니다.

 css_template = f"{{tag}} {'{{'} margin: 0; padding: 0;{'}}'}" for_p = css_template.format(tag="p") # 'p { margin: 0; padding: 0;}'

RunOrVeith

아니면 브래킷 자체를 매개변수화합니까? 아마도 매우 장황할 것입니다.

 x = '{open_bracket}42{close_bracket}'.format(open_bracket='{', close_bracket='}') print(x) # {42}

Mortz

코드 문자열을 보간하려고 할 때 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))

따라서 다른 답변이 제안하는 것처럼 중괄호를 복제하도록 강요되지 않습니다.


BPL

문자열 앞에 따옴표 없이 문자 'r'을 추가하기만 하면 원시 문자열 방법을 사용하여 이 작업을 수행할 수 있습니다.

 # to print '{I am inside braces}' print(r'{I am inside braces}')

Chetan Goyal

이스케이프 시퀀스를 사용하여 f-문자열에서 중괄호를 이스케이프하십시오. 예: 인쇄(f'{a={1}}')


Abhishek

출처 : http:www.stackoverflow.com/questions/5466451/how-can-i-print-literal-curly-brace-characters-in-a-string-and-also-use-format

반응형