[Python] 표현식 기반 문자열 조합

2 분 소요

문자열 조합

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    '