.format(또는 f-string)을 사용하는 동안 문자열 내에서 컬리브레이스({}) 문자를 이스케이프하려면 어떻게 해야 합니까?
동작하지 않는 예:
print(" \{ Hello \} {0} ".format(42))
원하는 출력:
{Hello} 42
로 해야 요.{{
★★★★★★★★★★★★★★★★★」}}
:
>>> x = " {{ Hello }} {0} "
>>> print(x.format(42))
' { Hello } 42 '
다음은 형식 문자열 구문에 대한 Python 문서의 관련 부분입니다.
에는 " 필드되어 있으며, 이 필드에는 "대체 필드"가 중괄호로 있습니다.
{}
되지 않은 은 리터럴되지 않고 복사됩니다. 중괄호에 포함되지 않은 것은 리터럴 텍스트로 간주되며 출력에 변경되지 않고 복사됩니다.가 있는 는, 「중괄호」를 2배로 해 할 수 .{{
★★★★★★★★★★★★★★★★★」}}
.
Python 3.6+ (2017)
최신 버전의 Python에서는 f-string을 사용합니다(PEP498 참조).
double f-nowledge를 .{{
★★★★★★★★★★★★★★★★★」}}
n = 42
print(f" {{Hello}} {n} ")
원하는 것을 생성하다
{Hello} 42
리터럴 텍스트를 사용하는 대신 괄호 안의 식을 해결해야 하는 경우 다음 세 가지 괄호가 필요합니다.
hello = "HELLO"
print(f"{{{hello.lower()}}}")
생산하다
{hello}
교정기를 두 개씩 돌려서 탈출하는 거야
예:
x = "{{ Hello }} {0}"
print(x.format(42))
OP는 다음과 같은 코멘트를 남겼다.
을 어떤으로 쓰려고 , 쓰려고 했어요.
'{"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 문자열이 예제보다 복잡할 경우 단연 권장됩니다.
을 '아까보다'로합니다.{
★★★★★★★★★★★★★★★★★」}
두 배로 늘리면 돼
「」{
f'{{'
★★★★★★★★★★★★★★★★★」}
f'}}'
따라서:
name = "bob"
print(f'Hello {name} ! I want to print }} and {{ or {{ }}')
출력:
안녕하세요 bob! } 및 { 또는 { }을(를) 인쇄하고 싶습니다.
정확한 예에서는 OR:
number = 42
print(f'{{Hello}} {number}')
인쇄:
{여보세요}42
마지막으로:
number = 42
string = "bob"
print(f'{{Hello}} {{{number}}} {number} {{{string}}} {string} ')
{Hello} {42} 42 {bob} 밥
이것을 시험해 보세요.
x = "{{ Hello }} {0}"
다음을 수행합니다.
x = " {{ Hello }} {0} "
print x.format(42)
더 나은 것은 아니지만 참고용으로 다음과 같은 작업을 수행할 수도 있습니다.
>>> x = '{}Hello{} {}'
>>> print x.format('{','}',42)
{Hello} 42
, 인쇄를 때 합니다.{argument}
.하다'{{{}}}'.format('argument')
위치는 인수는 생략합니다).{}
{0}
Python 2.7 이 python
key = "FOOBAR"
print(f"hello {{{key}}}")
출력
hello {FOOBAR}
스트링을 사용하여 곱슬 괄호 안에 인쇄하고자 하는 경우.
f-module(패키지 3)
f-magic을 적용하는 문자열 부분에만 f-string을 사용하고 리터럴이며 'unsafe' 특수문자를 포함할 수 있는 모든 부분에는 일반(dumb) 문자열을 사용하면 곱슬 괄호를 겹치지 않아도 됩니다.python이 여러 문자열을 함께 쌓는 것만으로 문자열 결합을 수행할 수 있습니다.
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}")
문자열에 두 개의 곱슬괄호를 사용해야 하는 경우 변수 양쪽에 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 의 문자열 또는 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")
성능에 문제가 없는 경우 작업을 완료합니다.
나는 이 파티에 터무니없이 늦었다.다음과 같이 브래킷을 교체 요소에 장착하는 데 성공했습니다.
print('{0} {1}'.format('{hello}', '{world}'))
인쇄하는 방법
{hello} {world}
엄밀히 말하면 OP가 요구하는 것은 이것이 아닙니다.포맷 문자열에 괄호를 삽입하고 싶기 때문입니다만, 이것이 도움이 될 가능성이 있습니다.
는 , 유는{}
는 의 입니다..format()
,.format()
{Hello}
그래서 에러가 났어요.
이중 물결 괄호 {{}}를 사용하여 재정의할 수 있습니다.
x = " {{ Hello }} {0} "
또는
해보다%s
포맷의 ,
x = " { Hello } %s"
print x%(42)
라텍스 문서에 페이스트를 복사할 수 있는 텍스트를 인쇄하려고 하다가 우연히 이 문제를 발견했습니다.이 답변을 확장하여 명명된 대체 필드를 사용합니다.
예를 들어, 라텍스에서는 다음과 같은 인덱스를 가진 다중 변수의 제품을 인쇄하려고 합니다.$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))
"따옴표 벽"을 사용하여 포맷된 문자열 부분을 일반 문자열 부분과 구분할 수 있습니다.
송신원:
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}
fstring value injection을 방지하기 위해 더블 {{}}을(를) 사용했습니다.
예를 들어 어레이를 캡처하는 데 {}의 식이 필요한 정수 어레이 열을 업데이트하기 위한 Postgres UPDATE 문입니다. 즉,
포트 = '{100,200,300}'
그것을 구부리고,
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
1개의 곱슬머리 괄호만 인쇄하는 경우(예:{
)를 사용할 수 있습니다.{{
필요에 따라 스트링 뒤에 중괄호를 추가할 수 있습니다.예를 들어 다음과 같습니다.
>>> 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'
코드 스트링을 보간하려고 할 때는 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))
그래서 다른 모든 답변에서 알 수 있듯이 곱슬곱슬한 괄호를 복제하도록 강요당하지 않을 것이다.
포맷 가능한 f-string 템플릿 내에서 컬리브래치가 필요한 경우 f-string의 컬리브래치 세트 내에서2개의 컬리브래치가 포함된 문자열을 출력해야 합니다.
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}
언급URL : https://stackoverflow.com/questions/5466451/how-do-i-escape-curly-brace-characters-in-a-string-while-using-format-or
'programing' 카테고리의 다른 글
Excel의 CSV 소수점 (0) | 2023.04.16 |
---|---|
UITextField 및 UITextView 커서/캐럿 색상 변경 (0) | 2023.04.16 |
'git diff'가 호출기를 사용하지 않도록 하려면 어떻게 해야 합니까? (0) | 2023.04.16 |
Mercurial과 Git의 차이점은 무엇입니까? (0) | 2023.04.16 |
Git 저장소의 이름을 변경하려면 어떻게 해야 합니까? (0) | 2023.04.16 |