파이썬은 다양한 방법으로 문자열을 만들 수 있는데, 이번에는 서식 지정자(format specifier)로 문자열을 만드는 방법과 format 메서드로 문자열을 만드는 문자열 포매팅(string formatting)에 대해서 알아보자
- '%s' % '문자열
s: string
>>> 'I am %s.' % 'ryan'
'I am ryan.'
문자열을 바로 지정하지 않고, 변수를 지정할 수도 있다.
>>> 'I am %s.' % name
'I am ryan.'
- '%d' % 숫자
d: decimal integer
>>> 'I was born in %d.' % 1989
'I was born in 1989.'
- '%f' % 숫자
f: fixed point
>>> '%f' % 3.3
'3.300000' # 기본적으로 소수점 이하 6자리까지 표시
- '%.자릿수f' % 3.3
소수점 이하 자릿수를 지정하려면 f 앞에 .(점)과 자릿수를 지정해주면 된다.
>>> '%.2f' % 3.3 # 소수점 이하 2자리까지 표시
'3.30'
>>> '%.3f' % 3.3 # 소수점 이하 3자리까지 표시
'3.300'
- %길이s
% 뒤에 숫자를 붙이면 문자열을 지정된 길이로 만든 뒤 오른쪽으로 정렬하고 남는 공간을 공백으로 채운다.
>>> '%8s' % 'jeju'
' jeju'
왼쪽 정렬을 하고 싶으면 문자열 길이에 -를 붙여주면 된다.
>>> '%-8s' % 'jeju'
'jeju '
- '%d %s' % (숫자, '문자열')
>>> 'I met you at %d %s.' % (10, 'last night')
'I met you at 10 last night.'
서식 지정자가 여러 개면 괄호 안의 값(변수)개수도 서식 지정자 개수와 똑같이 맞춰주어야 한다.
파이썬은 문자열을 만들 때 서식 지정자 방식보다 더 간단한 문자열 포매팅(string formatting)을 제공한다. 문자열 포매팅은 { }(중괄호) 안에 포매팅을 지정하고 format 메서드로 값을 넣는다.
- '{인덱스}'.format(값)
>>> 'Hello, {0}'.format('Jeju!')
'Hello, Jeju!'
>>> 'Hello, {0} This is Sparta!'.format('300!')
'Hello, 300! This is Sparta!'
'Hello, {0} {2} {1}'.format('Sparta', 'won', 300)
'Hello, Sparta 300 won'
{ }에 인덱스를 지정한 뒤 format에는 인덱스가 증가하는 순서대로 값을 넣으면 된다.
'{0} {0} {1} {1}'.format('This is', 'Sparta!')
'This is This is Sparta! Sparta!'
>>> 'Hello, {} {} {}'.format(300, 'and', 'Harry')
'Hello, 300 and Harry'
>>> 'Hello, {language} {version}'.format(language='Python', version=3.8)
'Hello, Python 3.8'
변수에 값을 넣고 { }에 변수 이름을 지정하면 된다. 이때는 문자열 앞에 포매팅(formatting)이라는 뜻으로 f를 붙인다.
>>> f'Hello, {language} {version}'
'Hello, Python 3.8'
참고로 중괄로 자체를 출력하려면 {{,}}처럼 중괄호를 두 번 사용하면 된다.
>>> '{{ {0} }}'.format('Django')
'{ Django }'
- '{인덱스:<길이}'.format(값)
'{0:<10}'은 부등호 방향이 왼쪽을 가리키고 있는데, 문자열을 지정된 길이로 만든 뒤 왼쪽으로 정렬하고 남는 공간을 공백으로 채운다.
>>> '{0:<8}'.format('Jeju')
'Jeju '
- '{인덱스:>길이}'.format(값)
'{0:>10}'은 부등호 방향이 오른쪽을 가리킨다. 문자열을 지정된 길이로 만든 뒤 오른쪽으로 정렬하고 남는 공간을 공백으로 채운다.
>>> '{0:>10}'.format('Jeju')
' Jeju'
참고로 인덱스를 사용하지 않는다면 :(콜론)과 정렬 방법만 지정해도 된다.
>>> '{:>8}'.format('Seoul')
' Seoul'
- '%0개수d' % 숫자
- '{인덱스:0개수d}'.format(숫자)
>>> '%03d' % 7
'007'
>>> '{0:05d}'.format(4885)
'04885'
실수도 숫자 개수를 맞출 수 있다. 소수점 이하 자릿수를 지정하고 싶으면 %08.2f처럼 .(점) 뒤에 자릿수를 지정해주자.
- '%0개수.자릿수f' % 숫자
- '{인덱스:0개수.자릿수f}'.format(숫자)
>>> '%08.2f' % 3.3
'00003.30'
>>> '{0:010.4f}'.format(33.1)
'00033.1000'
주의할 점은 실수는 숫자 개수에 정수 부분, 소수점, 소수점 이하 자릿수가 모두 포함된다는 것이다. 따라서 '00033' 5개, '.' 1개. '1000' 4개 총 10개다.
문자열 포매팅은 채우기와 정렬릉ㄹ 조합해서 사용할 수 있다.
- '{인덱스:[[채우기]정렬][길이][.자릿수][자료형]}'
>>> '{0:0<10}'.format(35)
'3500000000'
>>> '{0:0>10}'.format(35)
'0000000035'
>>> '{0:0>10.3f}'.format(35)
'000035.000'
>>> '{0: >10}'.format(35)
' 35'
>>> '{0:>10}'.format(35)
' 35'
>>> '{0:x>10}'.format(35)
'xxxxxxxx35'
문자열 메서드와 서식 지정자, 문자열 포매팅은 필요한 부분만 익혀서 사용하면 된다.
>>> format(13425334434494, ',')
'13,425,334,434,494'