[Python] 표현식 기반 문자열 조합
문자열 조합
String formatting expressions : 표현식을 기반으로 문자열을 조합하기
>>> s = 'My name is %s' % 'Lee'
>>> s
'My name is Lee'
%연산자를 기준으로 왼쪽은 구성할 문자열의 기본틀이다. 그리고 %s를 대체할 내용은 % 연산자의 오른편에 등장한다.
타입지시자 : 값의 종류(타입)를 지시하는 용도 = 서식 지시자 = ‘conversion specifier’
- %s : 이 위치에다가 문자열을 넣어라
- %d : 이 위치에다가 정수를 넣어라(10진수 형태의 정수)
- %f : 이 위치에다가 실수를 넣어라
더 다양한 타입 지시자들이 있지만 위 세가지만 기억해도 충분하다.
>>> friends = [('jung',22), ('hong',23), ('park',24)]
>>> for f in friends:
print('My friend %s is %d years old' % (f[0], f[1]))
My friend jung is 22 years old
My friend hong is 23 years old
My friend park is 24 years old
하나의 틀 안에 둘 이상의 값들을 넣을 수도 있다. 이때 대체할 값들은 튜플로 묶어야 된다.
>>> s = 'My friend %s is %s years old and %scm tall. ' & ('jung',22,175.8)
>>> s
My friend jung is 22 years old and 175.8cm tall.
위 코드에서 보이듯이 %s가 등장하면 문자열 이외에 원하는 것 대부분을 가져다 놓을 수 있다. 이것이 가능한 이유는, 파이썬이 형 변환을 해주기 때문이다. %s를 통해서 문자열을 가져다 놓으라고 했는데 정수22가 왔다. 그럼 파이썬은 정수 22를 문자열 ‘22’로 바꿔준다. 단 역은 성립하지 않는다.
>>> print('%f' % 25)
25.000000
>>> print('%d' % 3.14)
3
그 외에 “ 정수를 %f의 위치에 가져다 놓은 경우 정수가 실수로 자동 변환된다. “ “ 실수를 %d의 위치에 가져다 놓은 경우 실수가 정수로 자동 변환된다. “
정수는 소수점 이하의 값을 표현하지 못하기 때문에 실수를 정수로 변환하는 과정에서 소수점 이하의 값이 사려진다.
튜플 말고 딕셔너리로 출력 대상 지정하기
‘%(key)s_%(key)s’ % {key:value, key:value}
>>> s = "%(name)s : %(age)d" % {'name': 'Yoon', 'age' : 22}
>>> s
'Yoon : 22'
이러한 스타일의 장점은 이름을 통해서 삽입할 내용을 결정할 수 있다는 것이다.
>>> s = "%(name)s : %(age)d" % {'age' : 22, 'name': 'Yoon'}
>>> s
'Yoon : 22'
다음과 같이 이름으로 지정하는 경우 딕셔너리의 구성은 상관이 없다. 즉 순서가 상관이 없다.
보다 세밀한 문자열 조합 지정
%[flags][width][.precision]f
- [flags] : - 또는 0 또는 +를 넣어서 특별한 신호를 줌
- [width] : 폭, 어느 정도 넓이를 확보하고 출력할지를 결정
- [.precision] : 정밀도, 소수 이하 몇째 자리까지 출력할지 결정
>>> '%f' % 3.14
'3.140000'
>>> '%.3f' % 3.14
'3.140'
>>> '%.2f' % 3.14
'3.14'
>>> '%7.2f' % 3.14
' 3.14' # 3칸의 앞 공백 발생
>>> '%10.2f' % 3.14
' 3.14' # 6칸의 앞 공백 발생
>>> '%07.2f' % 3.14
'0003.14'
>>> '%010.2f' % 3.14
'0000003.14'
>>> '%-7.2f' % 3.14
'3.14 ' # 3칸의 뒤 공백 발생
>>> '%-10.2f' % 3.14
'3.14 ' # 6칸의 뒤 공백 발생
>>> n = 3
>>> '%+d' % n
'+3'
>>> '%+d' % -n
'-3'
flag 정리 ‘+’ : 부호 정보도 함께 출력해라. (0보다 크면 +, 작으면 -를 붙여서 출력) ‘0’ : 빈 공간을 0으로 채워라 ‘-‘ : 공간이 남을 때는 왼쪽으로 붙여서 출력
>>> 'height : %-+10.3f' % 3.14
'height : +3.140 '
>>> '%(h)s : %(v)-+10.3f' % {'h':'height', 'v':3.14}
'height : +3.140 '