Welcome to the Matrix

013. 파이썬 문자열 포매팅(서식 지정자) 사용 방법 본문

Python/PythonBasic

013. 파이썬 문자열 포매팅(서식 지정자) 사용 방법

haru.keiko 2020. 12. 28. 12:38

파이썬 문자열 포매팅 썸네일

문자열 포매팅

이번에는 print() 함수에 날개를 달아주는 '문자열 포매팅(String Formatting)'에 대해 알아보겠습니다. 

 

문자열 포매팅이란 무엇인지 먼저 알아보고 다음 순서로 살펴보도록 하겠습니다. 

  • 전통적인 파이썬 문자열 포매팅
  • format()을 사용한 문자열 포매팅
  • f 문자열 포매팅

 

파이썬에서 print() 함수를 사용해 데이터를 출력할 때, 이를 문자열로 만들어서 표현할 수 있습니다.

데이터를 문자열로 만들던, 아니면 데이터 자체가 갖는 자료형으로 사용하던지 결국 화면에 출력되는 결과물은 문자열로 인식합니다. 생각해보면 당연한 것이 만약 공책에 연필로 숫자를 쓰거나 문자를 쓰거나 혹은 *, $, % 와 같은 특수 문자를 쓰던 어떤 것이든 문자로 표현되기 때문이죠.

우리의 인식이 숫자나 문자 그리고 특수문자일 뿐이지, 실제적으로 표현되는 것은 '문자열'입니다.

 

'문자열 포매팅'이란, 문자열을 형식화된 문자열로 표현하는 방법입니다. 문자열을 이용하여 어떠한 데이터를 표현할 때, 그 데이터의 자료형의 형식 형식(서식)에 맞게 그에 대응하는 데이터를 문자열로 표현할 수 있습니다.   

 

예를 들어, '철수의 나이는 10살입니다.'라는 문장이 있다고 가정합시다. 

위 문장에서 의미상 '철수'라는 데이터는 문자열 데이터일 것이고, '10'은 숫자형 데이터일 것입니다. 이를 파이썬의 문자열 포매팅을 이용해서 표현하면, 다음과 같습니다. 

'철수의 나이는 10살 입니다.'
'%s의 나이는 %d살 입니다.' % ('철수', 10)

파이썬 전통적인 방법의 문자열 포매팅

위 두 문장은 동일한 문장입니다. 

첫 번째 문장은 '철수의 나이는 10살입니다'라는 문자열 자체로 고정이 됩니다. 

하지만, 두 번찌 문장은 '포맷 서식 지정자('%()')'의 내용으로 '이름'과 '나이'에 어떤 값을 사용하느냐에 따라 다양한 문자열을 표현할 수 있습니다. 

파이썬 전통적인 문자열 포매팅 방법에서 여러개의 값을 포매팅 하는 방법

위와 같이 동일한 문자열을 가지고 문자열 포매팅을 이용해 다양한 문자열을 표현할 수 있습니다. 

 

서식 지정자란, 특정 자료형을 표현하는 방법으로 자주 사용되는 서식 지정자는 다음과 같은 것들이 있습니다. 

  • %d : 'Decimal Integer를 의미하는 것으로, 정수 자료형을 표현합니다.
  • %f : 'Floating point'를 'Fixed Point'로 표현하는 것을 의미하고, 실수 자료형을 표현합니다.
  • %s : 'String'을 의미하고, 문자열 자료형을 표현합니다.

파이썬에서 문자열 포매팅을 사용하는 방법은 세 가지가 있습니다. 

 

전통적인 파이썬 문자열 포매팅

'%'를 사용하는 문자열 포매팅 방식은 C언어를 비롯한 다른 프로그래밍 언어에서도 사용이 되고 있습니다. 파이썬에서는 버전 2부터 사용되던 방식으로 파이썬 3에서도 여전히 사용되고 있습니다. 전통적인 파이썬 문자열 포매팅은 위에 설명한 것과 같습니다. 

 

사용 방법은 문자열 내에 각 자료형에 매치되는 서식 지정자(%d, %f, %s)를 입력하고, 문자열이 끝난 이후 % 뒤에 각 서식 지정자에 매치되는 데이터를 넣어줍니다. 

 

백 마디 말보다 실제 예를 보는 게 더 쉽게 이해될 것 같습니다. 

 

서식 지정자로 문자열 표현하기(%s)

서식 지정자를 이용해서 문자열을 표현하는 방법입니다. 

다음 예를 통해서 확인해 봅시다. 

'My name is %s.' % 'Jerry'

파이썬 문자열의 서식지정자를 사용해 문자열을 표현하는 방법

서식 지정자는 %로 시작하고 자료형을 의미하는 문자가 연이어 붙습니다. 문자열의 경우, %s를 서식 문자로 사용하고, 문자열 뒤에 %를 붙인 뒤 %s와 매치될 내용('Jerry')을 넣어주면, 문자열의 %s가 'Jerry'로 치환됩니다. 

 

물론, % 뒤에 문자열 자료형의 값을 바로 지정하지 않고, 변수를 사용할 수 도 있습니다. 

name = 'Jerry'
'My name is %s.' % name

파이썬 서식지정자를 이용해 변수를 문자열로 포매팅하는 방법

 

서식 지정자로 정수 표현하기(%d)

문자열 안에서 서식 지정자를 이용해 정수를 표현하는 방법입니다. 위에서 문자열을 표현하는 방법을 이해했다면, 아주 쉽게 이해할 수 있습니다. 

정수를 표현하기 위해선 %s 대신 %d를 사용하고, 문자열 이후에 % 와 정수 자료형을 사용하면 됩니다. 

'1 + 1 = %d' % 2
'1 + 1 = %d' % (1+1)

서식 지정자를 사용해 정수를 문자열로 표현하는 방법

한 가지 주의할 점은 1+1과 같은 수학 표현식을 사용하게 되면, 이를 괄호로 묶어줘야 합니다. 그렇지 않으면 다음과 같이 TyepError를 만나게 됩니다. 

서식지정자를 이용해 정수를 문자열로 만들 때 주의할 점, 수학 표현식을 사용할 때 괄로로 묶어야 한다.

 

서식 지정자로 실수 표현하기(%f)

문자열에서 서식 지정자를 이용해 실수를 표현할 수 있습니다. 

바로 다음 예를 살펴봅시다. 

'0.1 + 1.0 = %f' % (0.1 + 1.0)

서식지정자로 실수를 문자열로 표현하기

문자열 내 서식 지정자를 이용하여 실수를 표현할 때에도 문자열과 정수를 사용할 때와 동일한 규칙이 모두 적용됩니다.

 

실수를 위한 서식 지정자(%f)는 부동 소수점(Floating point)을 고정 소수점(Fixed point) 형식으로 표현을 하는데, 기본적으로 소수점 6자리까지 표현합니다. 원한다면, 실수의 소수점 이하 자릿수를 지정할 수 있습니다. 다음과 같이 %f 사이에 '. 자릿수'를 추하 가면 됩니다. 

# 소수점 자릿수 변경 : %.표현할자릿수f
'pi is %.2f' % 3.141592

서식지정자로 실수를 문자열로 표현할 때 소수점 이하자리 표현하는 방법

 

pi를 의미하는 값은 3.141592...입니다.

하지만, 위 예에서는 pi의 소수점 이하 2자리(%.2f) 까지만 표현하기를 원하기 때문에 3.14로 출력됩니다.

 

서식 지정자로 정렬하기

서식 지정자를 이용해서 문자열, 정수, 실수를 표현하는 방법을 알아봤습니다. 

이 외에도 서식 지정자를 이용하면 다양한 방법으로 자료형을 표현할 수 있는데, 그중 하나가 정렬하기입니다. 각 서식 지정자의 %와 서식 지정 문자(s, d, f)사이에 숫자를 넣어 오른쪽 또는 왼쪽 정렬을 할 수 있습니다. 

# 오른쪽 정렬
'1 + 1 = %10d 입니다.' % 2

# 왼쪽 정렬
'1 + 1 = %-10d 입니다.' % 2

파이썬에서 서식지정자를 사용할 때 정렬하는 방법

 

정수를 표현하기 위한 서식 지정자 %d를 위 예의 첫 번째 문장과 같이 %10d로 지정해서 오른쪽 정렬을 할 수 있습니다. 정수를 표현할 때, 10개의 공간을 미리 잡아놓고 오른쪽 정렬을 한 뒤 남은 공간을 공백으로 채웁니다. 

반대로 왼쪽 정렬을 하기 위해서는 %10d 대신 %-10d를 지정합니다. 

 

서식 지정자를 이용해 정렬하는 것은 문자열 출력의 가독성을 높일 수 있기 때문에 종종 사용됩니다. 

정수의 예만 살펴봤는데, 실수나 문자열 모두 동일하게 적용됩니다. 

 

서식 지정자를 이용해 여러 개의 값 표현하기

서식 지정자를 이용해서 하나의 데이터만 표현하는 것이 아니고, 여러 개의 자료형 데이터를 함께 표현할 수 있습니다. 이는 이 포스트의 가장 처음에 사용했던 예에서도 보였던 것인데, 프로그래밍을 하면서 하나의 데이터만 출력하는 경우는 극히 드문 경우이므로 대부분 여러 개의 값을 표현합니다. 

 

아래와 같이 사용할 수 있습니다.

'%d는 정수, %f는 실수, 그리고 %s는 문자열 입니다.' % (1, 1.1, 'hello')

파이썬에서 서식지정자를 이용할 때 여러 개의 값을 사용하는 방법

 

format() 사용한 문자열 포매팅

파이썬은 서식 지정자를 이용하는 방식보다 더 간단한 방법으로 format()을 사용한 문자열 포매팅 방법을 제공합니다.

 

기본 사용 방법

format()을 사용한 문자열 포매팅은 문자열 내의 중괄호({, }) 안에 치환할 데이터의 인덱스를 지정하고, 문자열 이후에 format() 함수를 이용해 데이터의 값을 넣습니다.

# 문자열 포매팅 사용법 - '{0}, {1}, ...'.format(1, 2, ...)
'Hello, {0}~!'.format('world')
'1 + 1 = {0}'.format(2)

파이썬 format 함수를 사용한 문자열 포매팅 기본 사용법

위와 같이 문자열 내 중괄호에 인덱스를 넣고, format() 함수에 그 인덱스에 해당하는 데이터를 넣어 매치시켜 출력합니다.

 

여러 개의 데이터를 처리하는 방법

물론 여러 개의 데이터를 처리할 수 도 있습니다. 

'My name is {0}. and I am {1} years old.'.format('Jerry', 10)
'I am {1} years old. and My name is {0}.'.format('Jerry', 10)

format 함수를 사용해 여러 개의 데이터를 처리하는 방법

format() 문자열 포매팅을 사용할 경우, 여러 개의 데이터를 위와 같이 표현할 수 있습니다. 문자열 내에 사용되는 데이터는 format()에 넣은 데이터의 순서에 맞는 인덱스를 사용하면 됩니다. 

 

만약, 인덱스를 생략한다면, format()의 순서와 1:1로 매치되어 사용됩니다. 

'My name is {}, and I am {}years old.'.format('Jerry', 10}

format 함수를 사용해 여러 개의 데이터를 처리하는 방법 예제

그리고 중복된 인덱스 값을 여러 번 사용할 수 있습니다. 

'I am {0} {0} {0}, {1} {1} {1}years old.'.format('Jerry', 10)

format 함수를 사용해 여러 개의 데이터를 처리할 때 인덱스를 사용하는 방법

 

또, 인덱스 대신 명확하게 사용하기 위해서 문자열로 인덱스를 대신할 수 도 있습니다. 

'I am {name}, {age}years old.'.format(name='Jerry', age=10)
'I am {age}years old, {name}.'.format(name='Jerry', age=10)

format 함수를 사용할 때 인덱스 대신 문자열을 사용하는 방법

 

실수 자료형 자릿수 지정하기

% 서식 지정자를 사용해 실수 자료형의 자릿수를 지정했던 것처럼, format()을 이용한 문자열 포매팅에서도 실수 자료형의 자릿수를 지정할 수 있습니다. 

사용 방법은 다음 예를 보면서 확인할 수 있습니다. 

'pi is {0:.2f}'.format(3.141592)

format 함수를 사용할 때 실수 자료형 자릿수를 지정하는 방법

 

foramt() 문자열 포매팅의 중괄호에 '인덱스' 뒤에 콜론(':')과 '.자릿수f'를 사용해서 실수의 자릿수를 표현합니다. 

'{인덱스:.자릿수f}'.format(실수 데이터)와 같이 사용할 수 있습니다. 

 

정렬하기

format() 문자열 포매팅을 이용해 데이터를 정렬하는 방법입니다. 

중괄호의 인덱스 뒤에 콜론(:) 그리고 위치를 나타내는 기호(<, ^, >)를 사용한 뒤, 공백으로 둘 길이를 넣어 정렬합니다. 

위치를 나타내는 기호는 왼쪽 정렬(<), 가운데 정렬(^), 그리고 오른쪽 정렬(>)을 사용합니다. 

다음 예를 통해 확인하겠습니다. 

'pi is {0:<10.2f}'.format(3.141592}
'pi is {0:^10.2f}'.format(3.141592}
'pi is {0:>10.2f}'.format(3.141592}

format 함수를 사용할 때 정렬하는 방법

 

천 단위 콤마 찍기

금액과 같은 숫자를 알아보기 쉽게 표현하기 위해서 세 자리 단위로 콤마를 찍을 수 있는데요, format() 문자열 포매팅을 통해 사용할 수 있습니다. 

'I have only {0:,} won now.'.format(15000)
'{0:,}, {1:,}'.format(10000000, 1234567890)

format 함수를 이용해 포매팅할 때, 천 단위 콤마 찍는 방법

 

f 문자열 포매팅

f 문자열 포매팅은 파이썬 버전 3.6부터 사용된 기능입니다. 그렇기 때문에 파이썬 버전 3.6 미만을 사용할 경우, f 문자열 포매팅은 사용할 수 없습니다. 

f 문자열 포매팅은 단순히 포매팅을 의미하는 'f'를 문자열 앞에 붙여 사용할 수 있습니다. 가장 큰 장점은 서식 지정자를 사용할 필요 없이 출력하고자 하는 값이나 변수를 중괄호('{', '}')에 넣기만 하면 된다는 점입니다. 보다 편하게 사용할 수 있습니다. 

f'hello, {"world"}~!'
f'I have only {1000} won. not {10000} won'
money = 1000
f'I have ony {money} won.'

f 문자열 포매팅을 사용하는 기본적인 방법

 

기본 자료형의 데이터 값이나 변수를 그대로 사용할 수 있고, 여러 값을 표현할 수 도 있습니다. 기존에 사용하던 문자열 포매팅에 비해 훨씬 단순해지고 편해진 것을 알 수 있습니다.

 

또한 기존 문자열 포매팅에서 사용하던 실수의 소수점이나 정렬과 같은 기능도 동일하게 사용할 수 있습니다. 

다음 예를 통해서 소수점, 정렬 등의 기능을 확인해 보겠습니다. 

f'pi is {3.141592:.2f}'
f'pi is {3.141592:<10.2f}'
f'pi is {3.141592:^10.2f}'
f'pi is {3.141592:>10.2f}'
f'I have only {15000:,}won.'

f 문자열 포매팅을 사용해서 소수점, 정렬등을 사용하는 예제

 

지금까지 문자열 포매팅에 대해서 알아봤습니다. 

문자열을 출력하기 위한 포매팅에 대한 내용일 뿐인데도 엄청나네요..

이게 문자열의 다가 아닙니다. 앞으로 차차 문자열을 가지고 할 수 있는 것들에 대해 더 알아볼 예정이니 마음 단단히 먹으셔야 할 겁니다..

이 정도면, 프로그래밍에서 문자열이 얼마나 중요한지 대충 감은 잡히지요~