25.4 문자열 서식 사용하기

이번에는 문자열의 서식(format)을 사용해보겠습니다. 참고로 서식을 사용해서 문자열을 만드는 방법을 문자열 포매팅(formatting)이라고도 부릅니다.

먼저 서식 지정자(format specifier)를 사용해보겠습니다. 서식 지정자는 다음과 같이 %로 시작합니다. %s는 문자열이라는 뜻이며 string의 s입니다.

>>> '%s' % 'Hello, world!'
'Hello, world!'

'%s'를 사용한 뒤 % 다음에 'Hello, world!'를 지정해주면 %s 부분이 'Hello, world!'로 바뀌게 됩니다('%s''Hello, world!' 사이의 %는 따옴표로 묶지 않고 그대로 입력해야 합니다).

물론 문자열과 서식 지정자를 섞어서 사용할 수도 있습니다. 다음은 'Hello, %s'에서 %s'world!'로 바꿉니다.

>>> 'Hello, %s' % 'world!'
'Hello, world!'

이번에는 서식 지정자를 여러 개 사용해보겠습니다. 이때는 % 뒤에 문자열 여러 개를 튜플로 만들어서 지정해줍니다.

>>> '%s %s' % ('Hello,', 'world!')
'Hello, world!'

서식 지정자 %s가 두 개이므로 ('Hello,', 'world!')와 같이 문자열 두 개를 튜플로 만들었습니다. 이처럼 %s가 여러 개라면 튜플의 요소 개수를 %s 개수와 똑같이 맞춰주어야 합니다.

그럼 숫자는 어떻게 표현할까요? 정수는 %d, 실수는 %f를 사용합니다(정수는 decimal의 d, 실수는 floating point의 f). 다음은 정수 10과 실수 3.5를 문자열로 만듭니다. %f는 기본적으로 소수점 아래 6자리까지 표시하므로 3.53.500000으로 표시됩니다.

>>> '%d %f' % (10, 3.5)
'10 3.500000'

지금까지 서식 지정자 사이를 공백으로 띄웠습니다. 서식 지정자를 서로 붙이면 결과도 서로 붙어서 나오므로 주의해야 합니다. 다음은 103.5가 붙어서 103.500000이 나옵니다.

>>> '%d%f' % (10, 3.5)
'103.500000'

파이썬은 문자열을 만들 때 서식 지정자보다 더 간단한 format 메서드를 제공합니다.

>>> 'Hello, {0}'.format('world!')
'Hello, world!'
>>> 'Hello, {0}'.format(100)
'Hello, 100'

이렇게 문자열 안에 { }를 넣고 인덱스를 지정합니다. 그리고 format에는 { } 부분에 넣을 값을 지정하면 됩니다.

이번에는 값을 여러 개 넣어보겠습니다. 인덱스의 순서와 format에 지정된 값의 순서를 주목해주세요.

>>> 'Hello, {0} {2} {1}'.format('Python', 'Script', 3.6)
'Hello, Python 3.6 Script'

{ }에 인덱스를 지정한 뒤 format에는 인덱스에 해당하는 값을 순서대로 넣으면 됩니다. 여기서는 {0} {2} {1}처럼 순서를 섞었고 format에는 'Python', 'Script', 3.6 순으로 넣었습니다. 따라서 인덱스 숫자에 해당하는 값이 들어가서 'Hello, Python 3.6 Script'가 나옵니다.

그림 25-2 format과 인덱스
그림 25 2 format과 인덱스

특히 같은 인덱스가 지정된 { }를 여러 개 넣으면 같은 값이 여러 개 들어갑니다. 다음은 문자열에 'Python'이 두 개, 'Script'가 두 개 들어갑니다.

>>> '{0} {0} {1} {1}'.format('Python', 'Script')
'Python Python Script Script'

만약 { }에서 인덱스를 생략하면 format에 지정한 순서대로 값이 들어갑니다.

>>>'Hello, {} {} {}'.format('Python', 'Script', 3.6)
'Hello, Python Script 3.6'

{ }에 인덱스 대신 이름을 지정할 수도 있습니다.

>>> 'Hello, {language} {version}'.format(language='Python', version=3.6)
'Hello, Python 3.6'

{language}{version}처럼 { }에 이름을 지정했습니다. format에는 format(language='Python', version=3.6)과 같이 이름에 해당하는 값을 지정해주면 됩니다.

파이썬 3.6부터는 문자열을 만드는 더 간단한 방법을 제공합니다. 다음과 같이 변수에 값을 넣고 { }에 변수 이름을 지정하면 됩니다. 이때는 문자열 앞에 포매팅(formatting)이라는 뜻으로 f를 붙입니다.

>>> language = 'Python'
>>> version = 3.6
>>> f'Hello, {language} {version}'
'Hello, Python 3.6'

{ } 중괄호 자체를 출력할 때는 {{, }}처럼 중괄호를 두 번 사용하면 됩니다.

>>> '{{ {0} }}'.format('Python')
'{ Python }'

그럼 이번에는 정수 앞에 0을 넣어서 숫자 개수를 맞추는 방법과 실수에서 소수점 자릿수를 지정하는 방법을 알아보겠습니다.

%d는 다음과 같이 %d 사이에 0과 숫자 개수를 넣어주면 자릿수에 맞춰서 앞에 0이 들어갑니다. 즉, %03d로 지정하면 1'001', 35'035'가 됩니다. { }를 사용할 때는 인덱스나 이름 뒤에 :(콜론)를 붙이고 03d처럼 0과 숫자 개수를 지정하면 됩니다.

>>> '%03d' % 1
'001'
>>> '{0:03d}'.format(35)
'035'

%f에서 소수점 자릿수를 지정할 때는 %.2f처럼 .뒤에 자릿수를 지정합니다. { }를 사용할 때는 인덱스나 이름 뒤에 :를 붙이고 .2f처럼 자릿수를 지정하면 됩니다.

>>> '%.2f' % 3.6
'3.60'
>>> '{0:.2f}'.format(3.6)
'3.60'

지금까지 문자열의 다양한 사용 방법에 대해 알아보았습니다. 문자열에서 가장 중요한 부분은 인덱스가 0부터 시작한다는 점입니다. 그리고 문자열을 범위로 접근할 때 음수를 사용하는 방법과 끝 인덱스를 생략하는 방법은 자주 사용하므로 익혀 두는 것이 좋습니다.

최근 수정: 2017년 6월 29일, 목요일, 오전 10:40