<개인공부>/[Python]

[python] 파이썬 format 함수 (문자열 포매팅 방법 1)

사용자 BlockDMask 2020. 9. 17. 00:30
반응형

안녕하세요. BlockDMask 입니다.
파이썬에서 문자열 포매팅 방법은 %와 서식기호를 이용한 방법, format 함수를 이용한 방법, f-string을 이용한 방법 이렇게 세가지가 있다고 볼 수 있습니다.

오늘은 파이썬 포매팅, 문자열 출력 방법 중에 format 함수를 이용한 방법에 대해서 알아보려고 합니다.
다른 두가지 방법은 아래 링크 타고 가시면 다른 포스팅이 존재합니다.
%와 서식 기호를 이용한 방법 [바로가기]
f-string을 이용한 방법 [바로가기]

그럼 파이썬 내장함수 format에 대한 포스팅을 시작해보겠습니다.

<목차>
1. format 함수란?
2. format 함수 예제1 (기본)
3. format 함수 예제2 (응용)
4. format 을 이용해서 구구단 프로그램 출력 해보기


1. 파이썬 format 함수에 대해서



▶ 포메팅 이란?

format 함수에 대해서 알기 전에 우린 문자열 포매팅이 뭔지 부터 알아야합니다.
문자열 포매팅이란 문자열을 이쁘게 만드는 방법을 이야기합니다.
좀 더 풀어서 이야기 해보자면 문자열 중간 중간에 특정 변수의 값을 넣어주기 위해서 사용하는 것 입니다.

예를 들어 우리가 구구단 프로그램을 만들다 보면
print('2 x 3 = 6') 이런식으로 노가다성으로 문자열을 만들지 않잖아요.
2도 변수, 1도 변수, 결과값인 6도 변수로 사용되고 있을텐데, 이런 형태의 문자열을 포매팅 해서 문자열을 이쁘게 재사용하도록 하는것 입니다.

곧 배우겠지만 format 함수를 사용하면 이렇게 되겠죠?
(a, b가 변수라고 쳤을 때)
print('{0} x {1} = 6'.format(a, b, a * b)) 이렇게 말이죠


▶ format 함수 사용법
format 함수는 중괄호 {, } 안에 포매팅을 지정하고 format 함수의 인자로 값들을 넣습니다.
아래를 보면 한번에 느낌이 오실겁니다.

'{인덱스0}, {인덱스1}'.format(값0, 값1)

실제로 한번 볼까요? 구구단을 예로 들어보겠습니다.

1
2
3
4
5
= 2
= 3
 
= '구구단 {0} x {1} = {2}'.format(a, b, a * b)
print(s)
cs

문자열 '구구단 {0} x {1} = {2}' 를 보면 중괄호를 이용해서 format 함수에서 넣어줄 것들을 표기 해줍니다.
인덱스는 0 부터 시작합니다. 이렇게 표시를 해주고 .format 함수의 인자로 순서대로 넣을 변수들을 지정해 줍니다.

이해가 잘 가셨나요? 아직 이해가 안갔다면 한번 그림으로 표현 해 보겠습니다.

이렇게 순서대로 가리키게 됩니다.

그럼 숫자를 바꿔보면 어떨까요?
괄호에 아무것도 안넣어도 될까요?
그것은 아래 예제에서 한번 이야기해보겠습니다.


2. 파이썬 문자열 format 함수 예제 (기본)


▶ 2-1 : 직접 대입, 변수로 대입, 이름으로 대입

1
2
3
4
5
6
7
8
9
10
11
12
13
# 직접 대입하기
s1 = 'name : {0}'.format('BlockDMask')
print(s1)
 
 
# 변수로 대입 하기
age = 55
s2 = 'age : {0}'.format(age)
print(s2)
 
# 이름으로 대입하기
s3 = 'number : {num}, gender : {gen}'.format(num=1234, gen='남')
print(s3)
cs

결과

이렇게 format 함수의 인자로 직접 값을 입력하거나, 변수를 입력하거나, 직접 이름을 지어줘도 됩니다.
참 유용하지 않나요?


▶ 2-2 : format 문자열의 중괄호의 인덱스 가지고 놀기

1
2
3
4
5
6
7
8
9
10
11
12
13
# 인덱스를 입력하지 않으면?
s4 = 'name : {}, city : {}'.format('BlockDMask''seoul')
print(s4)
 
 
# 인덱스 순서가 바뀌면?
s5 = 'song1 : {1}, song2 : {0}'.format('nunu nana''ice cream')
print(s5)
 
 
# 인덱스를 중복해서 입력하면?
s6 = 'test1 : {0}, test2 : {1}, test3 : {0}'.format('인덱스0','인덱스1')
print(s6)
cs

결과

결과 창을 보셨듯
s4 : 인덱스를 입력하지 않으면 format 인자 순서대로 들어갑니다.
s5 : 인덱스 순서가 바뀌어도 인덱스 번호가 있기 때문에 번호에 맞는 인자 값들이 들어가게 됩니다.
s6 : 인덱스를 중복해서 입력하면 해당하는 인자 값이 또 들어 갑니다. 중복 해도 OK.


▶ 2-3 : format 함수를 사용할때 중괄호가 나오게 하려면?

1
2
3
4
5
6
7
8
# 나와라 중괄호
s7 = 'Format example. {{}}, {}'.format('test')
print(s7)
 
 
# 중괄호로 겹쳐진 인자값
s8 = 'This is value {{{0}}}'.format(1212)
print(s8)
cs

결과

s7 : 중괄호를 두번 겹치면 원래의 중괄호 문자가 나오게 됩니다.
s8 : 출력할 값을 중괄호로 겹쳐서 출력하려 하면 이렇게 중괄호를 세개로 겹치면 되겠죠?


3. 파이썬 문자열 format 함수 예제 (응용)


▶ 3-1 : 문자열 정렬하기

1
2
3
4
5
6
7
8
9
10
11
12
13
# 왼쪽 정렬
s9 = 'this is {0:<10} | done {1:<5} |'.format('left''a')
print(s9)
 
 
# 오른쪽 정렬
s10 = 'this is {0:>10} | done {1:>5} |'.format('right''b')
print(s10)
 
 
# 가운데 정렬
s11 = 'this is {0:^10} | done {1:^5} |'.format('center''c')
print(s11)
cs

결과

s9, s10, s11 을 보면 딱 좌 우 가운데 정렬이 되고 나머지 빈 칸은 공백으로 처리 되는 것을 볼 수 있습니다.
왼쪽 정렬에는 기호 < 를 사용하고, 오른쪽 정렬에는 >, 가운데 정렬에는 ^를 사용합니다.
기호 뒤에 나오는 숫자는 자릿수를 말합니다. 

즉 아래와 같습니다.
{0:<10} 이 뜻하는 것은 {0} 값을 ":<10" 10자리로 표현할건데 왼쪽 정렬을 할 것이다. 라는 뜻 이고
{1:>5} 가 뜻하는 것은 {1} 값을 ":>5" 5자리로 표현할건데 오른쪽 정렬을 할 것이다. 입니다.


▶ 3-2 : 문자열에 공백이 아닌 값 채우기

1
2
3
4
5
6
7
8
9
10
11
12
13
# 왼쪽 정렬
s12 = 'this is {0:-<10} | done {1:o<5} |'.format('left''a')
print(s12)
 
 
# 오른쪽 정렬
s13 = 'this is {0:+>10} | done {1:0>5} |'.format('right''b')
print(s13)
 
 
# 가운데 정렬
s14 = 'this is {0:.^10} | done {1:@^5} |'.format('center''c')
print(s14)
cs

결과

이렇게 <, >, ^ 기호 앞에 특정 문자를 입력하면 공백 부분이 다른것으로 채워지는걸 볼 수 있습니다.


▶ 3-3 : 자리수와 소수점 표현하기

1
2
3
4
5
6
7
8
# 정수 N자리
s15 = '정수 3자리 : {0:03d}, {1:03d}'.format(1234512)
print(s15)
 
 
# 소수점 N자리
s16 = '아래 2자리 : {0:0.2f}, 아래 5자리 : {1:0.5f}'.format(123.12345673.14)
print(s16)
cs

결과

s15 : 정수의 자리수를 표현할떄는 '0Nd' 로 표현합니다. N은 원하는 자릿수를 입력하면 됩니다. 자릿수가 부족한 경우는 자동으로 0으로 채워집니다.
s16 : 소수점 자리수를 표현할때는 '0.Nf' 로 표현합니다. N은 소수점 아래 표시할 자릿수를 입력하면 됩니다. 이것도 마찬가지로 남는 부분은 0으로 표시 됩니다.



4. 구구단 프로그램 만들어 보기 (format 함수를 이용해서 자릿수 맞추기)


1
2
3
4
# 구구단 표시 (2단과 3단만 표시)
for a in range(24):       # 앞에 표시하는 단 수 (2단, 3단)
    for b in range(110):  # 뒤에 곱하는 수
        print('{0} x {1} = {2:2}'.format(a, b, a*b))
cs

결과

별거 아니지만 결과 값의 자리수를 맞춰 줌으로 이쁘게 출력할 수 있게 되었습니다.


네, 이상으로 파이썬 format 함수에 대해서 알아보았습니다.
정렬부터 시작해서 자리수 등등 이제는 다양하게 응용해서 쓸 수 있겠죠?

반응형