CS/Python

4. 문자열 formatting

bonggang 2019. 9. 14. 15:14

만일 문장의 형태가 모두 같은데 일부만 다른 문장이 있다고 했을 때 문장을 두 번 다 칠 것인가?

좀 더 편하게 이해할 수 있도록 예를 들어보자.

 

ex)

구자욱의 등번호는 65번이다.

박해민의 등번호는 58번이다.

 

위 두 문장에서 다른 부분은 선수의 이름과 등번호 부분이다. 그렇다면 우리는 이 2개의 차이점 때문에 '의 등번호는 번이다.'를 두 번 치는 비효율적인 행위를 해야하는 것이다. 이런 비효율적 행위를 막기 위해 우리는 문자열 formatting을 사용한다.

 

즉, 문자열 안의 특정할 값을 바꿔야 할 경우가 생겼을 때 어떤 값을 삽입할 수 있게 하는 방법이다.

아직까지 이해가 잘 안된다 하시는 분들을 위해 직접 문자열 포맷팅을 해보겠다.

 

>>> "%s의 등번호는 %d이다." % ("구자욱", 65)
>>> "%s의 등번호는 %d이다." % ("박해민", 58)

이런 식으로 % (입력 값)을 해주면 된다.

포맷 코드

코드 설명
%s 문자열
%c 글자 1개(character)
%d 정수
%f 소수
%o 8진수
%x 16진수

 

문자열 포맷 활용하기

 

문자열 포맷을 잘 활용한다면 우리는 좀 더 깔끔한 출력값을 얻을 수 있다.

 

공백

>>>"%10s" % "bong"

다음과 같은 코드가 있을 경우 출력 값은 어떻게 될까?

우리가 지금까지 해오던 방식과 다른 점은 포맷 코드에 숫자가 들어갔다는 점이다. 눈치빠른 사람들은 예상했겠지만 저것은 10개의 자리를 문자열을 위해 할당해둔다는 뜻으로 받아들이면 된다. 즉, 글자 수에 상관없이 10글자의 자리는 "bong"을 위한 자리로 비워둔다는 뜻이다. 그 중에서도 %10s오른쪽 정렬을 의미한다.

눈치 빠른 사람들은 왼쪽 정렬을 이미 눈치챘을 것이다. %-10s 를 써주면 왼쪽 정렬이 가능하다.

 

소수점

>>> "%0.5f" % 0.12345667889
'0.12345

그렇다면 소수점에도 자리 수를 미리 정해줄 수 있을까? 답은 당연히 yes다.

소수점을 표현하기 위해 포맷팅 %f에서 내가 지정해주고 싶은 부분에 숫자를 주면 된다. 예를 들어 소수점 아래로 표시할 자리 수를 표현하고 싶으면 예시와 같이 %0.5f로 표시해주면 된다.

 

사실 여기까지는 이전에 다른 언어로 코딩을 해본 사람들에게는 너무나 익숙한 내용들이다. 내가 이 게시글을 작성해두는 이유는 이 다음부터다.

format 함수를 사용한 포맷팅

>>>"구자욱 번호는 {0}이다.".format(65)
>>>"{0}의 등번호는 {1}이다.".format("구자욱",65)

>>>"{player}의 등번호는 {num}다.".format(player="구자욱", num=65)

format 함수를 사용해도 정렬이 가능하다.

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

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

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

#공백 채우기
>>>"{0:=^10}".format("fill")
'===fill==="

f문자열 포맷팅

f문자열 포맷팅 기능은 파이썬 3.6버전부터 사용할 수 있는 기능이다.

>>>num=65
>>>name='구자욱'
>>>f'{name}의 등번호는 {num}입니다.'

위의 예씨처럼 문자열 앞에 f를 붙이면 문자열 포맷팅을 사용할 수 있게된다.