[Python 독학] 파이썬 자료형 - 문자열 자료형 ③

2021. 6. 21. 20:40Python

문자열 포매팅(String Formatting)

 

문자열 안의 특정한 값을 바꿔야 할 경우

이것을 가능하게 해주는 것이 문자열 포매팅 기법이다.

일상에서 쉽게 볼 수 있는데

"현재 온도는 18도입니다."

라는 메세지가 뜨고 2시간이 지나 온도가 변하니

"현재 온도는 20도입니다."

라는 메세지가 뜨는 경우.

[Web발신]
[OO회사] 안녕하세요, OOO님.
정성껏 작성해주신 입사지원서의 접수가 완료되었습니다.
… (중략)

기업이나 단체에서 수많은 인원에게 이름부분만

바꾸어 동일한 내용의 문자를 보낼 때 자주 보인다.

 

  문자열 포맷 코드

%s 문자열(String)
%c 문자 1개(Character)
%d 정수(integer)
%f 부동 소수(Floating-point)
%o 8진수
%x 16진수
%% Literal % (문자 '%' 자체)

사실 %s 포맷 코드가 어떤 형태의 값이든

변환해 넣을 수 있기 때문에 만능이라

다 외울 필요는 없다고 하는데

그래도 혹시 모르니까 적어본다.


print format 사용

print("I eat %d apples." % 3)
>>> I eat 3 apples.

print("I eat %d %s." % (5, "apples"))
>>> I eat 5 apples.

%d라고 쓰인 자리에 문장 마지막에 적은

% 뒷 숫자. 즉 '3'을 넣어 완성시킨 문장을 내보낸다.

 

이와 같은 원리로 '문자'를 넣을 수도 있고,

2개 이상의 값을 넣을 수도 있다.

>>> "I eat %s apples." % "five"
'I eat five apples.'
>>> number = 3
>>> "I eat %d apples." % number
I eat 3 apples.'
>>> number = 10
>>> day = "three"
>>> "I ate %d apples. so I was sick for %s days." % (number, day)
'I ate 10 apples. so I was sick for three days.'

 

포맷코드를 숫자와 함께 사용하면

정렬과 공백, 소수점 표현도 가능해진다.

>>> "%10s" % "hi"
'        hi'

예시를 보면 " " 안의 문자를 나타내되, 임의 칸(%s)에는 'hi'를 대입하면 된다.

다만 '%s'라는 포맷 코드 사이에 '10'이란 숫자를 있기 때문에

전체 길이가 10개인 문자열 공간에서 오른쪽으로 정렬해서 내보내란 것이다.

hi는 2글자인데 10개로 나오라고 했으니 앞에 공백 8칸+hi 가 나오는 것이다.

>>> "%-10sjane" % "hi"
'hi        jane'

숫자는 음수도 가능하다.

양수가 오른쪽 정렬이었으니

음수는 왼쪽 정렬이다.

>>> "%0.4f" % 3.42134234
'3.4213'

%f는 소수 포맷 코드, .은 소수점 포인트,

.뒤에 4는 소수 넷째 자리 까지라는 의미다.

>>> "%10.4f" % 3.22134234
'    3.4213'

위와 같은 의미지만 0.4가 아닌 10.4가

왔으므로 전체 문자열 길이는 10이며

오른쪽 정렬, 소수점 넷째 자리까지

나타내라는 의미이다.

 

 

str.format 함수 사용

print("{}는 {}개 있다.".format("사과", 4))
>>> 사과는 4개 있다.

위에서는 % 기호를 사용했다면 이번엔

{중괄호}를 대신 넣고 문자열 끝에 .format()을

붙이는 것이 특징이다.

 

>>> "I eat {0} apples".format(3)
'I eat 3 apples'

>>> "I eat {0} apples".format("five")
'I eat five apples'

>>> number = 3
>>> "I eat {0} apples".format(number)
'I eat 3 apples'

.format() 이라는 format 함수를 이용하는 방법이다.

문자열 안에 { }를 포함시키고 끝에 .format( )을 달면

문장 안 { } 자리에 ( )안에 적어 넣은 정보가 들어가

문장을 완성시킨다. 

>>> number = 10
>>> day = "three"
>>> "I ate {0} apples. so I was sick for {1} days.".format(number, day)
'I ate 10 apples. so I was sick for three days.'


>>> "I ate {number} apples. so I was sick for {day} days.".format(number=10, day=3)
'I ate 10 apples. so I was sick for 3 days.'


>>"I ate {0} apples. so I was sick for {day} days.".format(10,day=3)
'I ate 10 apples. so I was sick for 3 days.'

숫자, 글자, 2개 이상의 값,

숫자와 문자, 인덱스 혼용 모두 가능하다.

 

'정렬'도 가능하다.

왼쪽 정렬은  :<

오른쪽 정렬은  :>

가운데 정렬은  :^

왼쪽 정렬
>>> "{0:<10}".format("hi")
'hi        '

오른쪽 정렬
>>> "{0:>10}".format("hi")
'        hi'

가운데 정렬
>>> "{0:^10}".format("hi")
'    hi    '

기호를 사용한다. : 은 항상 붙고

<가 왼쪽을 가리키니까 왼쪽 정렬,

>가 오른쪽을 가리키니까 오른쪽 정렬

뭐, 이렇게 하면 좀 더 기억하기 쉽지 않을까?

 

그리고 기호 뒤에 따라오는 숫자

문자열 총자릿수를 의미한다.

참고로 위에서는 10이었다.

 

공백 부분을 특정 문자로 채우고 싶다면

희망하는 문자를 :과 또 다른 기호(>,<,^)

사이에 넣어주면 된다. 이렇게▼

>>> "{0:=^10}".format("hi")
'====hi===='

>>> "{0:!<10}".format("hi")
'hi!!!!!!!!'

 

소수점 표현 방법도

앞서 학습했던 내용과 비슷하다.

>>> y = 3.42134234
>>> "{0:0.4f}".format(y)
'3.4213'

>>> "{0:10.4f}".format(y)
'    3.4213'

f-string (**)

formatted string의 줄임말이다.

f-string은 변수가 미리 지정되어 있어야 한다.

apple = "사과", count = 4
print(f"{apple}는 {count}개 있다.")

직관적인 변수로 코드에 대한 캐치가

빠르기 때문에 익숙해지기만 하면 편해서

f-string에 익숙해 지기를 추천한다.

 

배웠던 내용들을 전부 mix 해보고 싶었는데

아직 내 실력으로는 소수점을 자른 키를

문장 속에 넣는 것은 무리인 것 같다.

더 배우다 보면 알게 되겠지( ͡° ͜ʖ ͡°)