개요
Python에서는 f-string이라는 간편하고 강력한 방법으로 문자열 포맷팅을 제공해주고 있는데, 간혹 일부 값만 치환해야 하는 상황에서는 사용할 수 없는 경우가 있었다. python에서 기본적으로 제공하는 %-포맷팅이나 str.format 함수도 확인을 해봤는데, 아무래도 제공하지 않는 기능인 것 같다.
이번 글에서는 문자열을 포맷팅하는 또 다른 방법인 Template이라는 기능을 소개하려고 한다.
Template
Template은 string의 기능으로 간단한 문자열 포맷팅을 제공하는데, 여기서 말하는 간단하다는 말은 Python의 다른 내장 문자열 포맷팅 기능보다 번역하기 쉽게 만들어졌다는 의미이다. (코드 관점에서의 이야기인 듯?)
string.Template은 $를 기반으로 문자열 치환을 제공한다. 기본적으로 치환할 문자열을 '$식별자'로 표시하지만, 보다 명확한 식별자 표시를 위해 '${식별자}'로 표시할 수도 있다.
임포트
문자열 템플릿은 아래와 같이 임포트하여 사용할 수 있다.
from string import Template
사용 예시
문자열 템플릿은 포매팅할 문자열을 Template 객체로 생성한 뒤, 치환할 값을 substitute 함수로 전달하는 방식으로 사용한다.
from string import Template
str_format = 'My name is ${name}, and I like ${food}.'
tmplt = Template(str_format)
print(tmplt.substitute(name='Passwd', food='pasta'))
다만 substitute 함수를 사용하면 다른 문자열 포맷팅 방식과 동일하게 일부 값만 치환하려고 시도하면 KeyError가 발생한다.
만약 일부 값만 업데이트할 필요가 있다면 safe_substitute 함수를 사용한다.
from string import Template
str_format = 'My name is ${name}, and I like ${food}.'
tmplt = Template(str_format)
print(tmplt.safe_substitute(name='Passwd'))
safe_substitute는 식별자를 전부 다 전달하지 않아도 KeyError를 일으키는 대신, 전달받지 못한 식별자는 치환하지 않은 상태의 문자열을 반환한다.
참고 문서
https://answer-me.tistory.com/63
https://docs.python.org/ko/3.8/library/string.html#template-strings