2017-10-11 17 views
1

format() 메서드는 끝내 주지만 내 문자열에 {}을 이스케이프하고 싶지 않으므로 선택 사항의 식별자를 변경하고 싶습니다.str.format()의 식별자로 중괄호를 변경하는 경우


'Hi {name}'.format(**{'name': 'Alok'}) 내가 {{}}을 사용하여 탈출해야하므로 {} 내 문자열의 일부 'Hi Alok'

'Hi {{{name1}, {name2}}}'.format(**{'name1':'foo', 'name2':'bar'})
은 2 예에서 'Hi {foo, bar}'

를 인쇄 할 인쇄됩니다.

나는 {}을 피하려고하거나 심지어 jinja 등과 같은 템플릿 엔진을 사용하고 싶지 않습니다. 어떻게 식별자를 바꿀 수 있습니까? 거기에 서브 클래스 str 클래스를 사용하는 방법이있을 것 같아요.

+1

'내가 탈출하기를 원하지 않는다면 {그리고}'그러면 어떻게하고 싶습니까? 이 질문은 매우 광범위합니다. –

+0

'' '하위 클래스 str 클래스를 사용하는 방법이있을 것 같아요.' '-이게 들리 네요. –

답변

-1

당신은 사용할 수 있습니다 그러나, 규칙은 더 간단하고 정렬과 같은 고급 서식 기능을 잃게 대신

{..}의 $ 기반 대체 할 String Templates.

문서 : string.Template

>>> from string import Template 
>>> s = Template('$who likes $what') 
>>> s.substitute(who='tim', what='kung pao') 
'tim likes kung pao' 
0

물론 당신은 아마도 STR 클래스를 서브 클래 싱 수도 있지만이의 againt 추천 할 것입니다. 다음과 같이 표시되는 예입니다.

# -*- coding: utf-8 -*- 

class FormattableString(str): 
    def format(self, symbols, *args, **kwargs): 
     start, end = symbols 
     prepared_string = self.replace(
      start, '{').replace(end, '}') 

     return prepared_string.format(
      *args, **kwargs) 

if __name__ == '__main__': 
    f_string = FormattableString('Hello [name]') 
    print(f_string.format(('[', ']'), name='john')) 

이전 스타일의 문자열 서식을 사용할 수도 있습니다. 여기

'Hi {%(name1)s, %(name2)s}' % {'name1':'foo', 'name2':'bar'} 

는 두 가지 방법을 비교 링크입니다 https://pyformat.info/

나는 어쩌면 기존의 스타일을 사용하여 다음 새로운 스타일의 혼란 가능한하지만 경우 문자열을 기존의 스타일을 피하는 것이 좋습니다

은 특정 위해 더 낫다 유스 케이스.

+0

이 솔루션은 여전히 ​​{{'와'}'를 substition으로 사용하기 때문에 제 목적을 해결하지 못합니다. 그래서'f_string = FormattableString ('{Hello} [name]')'은'{','}'를 벗어나지 않으면 작동하지 않습니다. –

+0

사실, 나는 그 부분을 놓쳤습니다. 같은 방식으로 도피를 추가 할 수 있습니까? –