본문 바로가기
Python

[Python] 문자열 포맷팅하는 방법 - format(), %, f-string 사용방법 및 예제

by A6K 2022. 11. 9.

파이썬으로 문자열 포맷팅하는 방법에 대해 알아보자. 파이썬 프로그래밍을 하다보면 문자열을 만들어야 할 경우가 있다. 이 때, 문자열 중간중간 변수 값을 넣어서 문자열을 만드는 경우가 많다.

예를 들어 'Dave의 나이는 27세 입니다', 'Ryan의 나이는 15세 입니다', 'Tim의 나이는 34세 입니다' 같은 문자열을 생각해보자. '?의 나이는 ?세 입니다.'라는 부분이 반복되고, 물음표에 해당하는 부분만 Dave, Ryan, Tim 그리고 27, 15, 34로 바뀐다.

'?의 나이는 ?세 입니다.'라는 패턴과 특정 값을 물음표 부분에 채워넣는 것을 문자열 포맷팅이라고 한다.

format() 함수

파이썬의 내장 함수인 format()을 이용해서 문자열을 포맷팅할 수 있다.

name = 'Dave'
age = 27

str = '{}의 나이는 {}세 입니다'.format(name, age)
print(str)

# Dave의 나이는 27세 입니다

'{}의 나이는 {}세 입니다'라는 문자열은 포맷을 나타낸다. 중괄호 부분인 {}이 어떤 변수의 값을 채우기 위한 자리이며, format() 함수의 인자들의 값이 순서대로 앞에서부터 {} 자리에 채워진다.

중괄호 안 쪽에 숫자를 넣어 format() 함수의 몇 번째 인자 값이 들어갈 자리인지 표현할 수도 있다.

name = 'Dave'
age = 27

str = '{0}의 나이는 {1}세 입니다'.format(name, age)
print(str)

# Dave의 나이는 27세 입니다

{0}은 첫 번째 값이 들어갈 자리를 의미하며 {1}은 두 번째 값이 들어갈 자리를 의미한다. 이 포맷 문자열뒤에 .format() 메소드를 붙여서 값을 채워 넣을 수 있다.

format() 함수에 넘겨주는 인자는 앞에서부터 차례대로 {0}, {1}에 채워져 문자열을 완성한다.

{0}과 {1}의 등장 순서가 바뀌어도 의미는 같다. 예를 들어

name = 'Dave'
age = 27

str = '{1}세 {0} 입니다.'.format(name, age)
print(str)

# 27세 Dave 입니다

format() 함수에는 name과 age 순으로 입력을 했다. 따라서 포맷 문자열에서 {0}은 name 변수의 값, {1}은 age 변수의 값으로 대응된다. 포맷 문자열에서 {0}과 {1}의 순서가 바뀌어도 이는 동일하다.

심지어 {0}과 {1}이 여러번 등장해도 같은 숫자엔 같은 값이 들어간다.

name = 'Dave'
age = 27

str = '{0} : {1}세 {0} 입니다.'.format(name, age)
print(str)

# Dave : 27세 Dave 입니다

인자로 넘겨 받은 값을 인덱스 형태가 아닌 이름 형태로 가져다 쓸 수도 있다. 

name = 'Dave'
age = 27

str = '{name} : {age}세 {name} 입니다.'.format(name=name, age=age)
print(str)

# Dave : 27세 Dave 입니다

format() 함수의 인자를 넣을 때, key=value 형태로 값을 넣어준다면 포맷 문자열에서 {key} 형태로 값을 가져다 사용할 수 있다.

만약 포맷 문자열에 중괄호 문자자체를 사용하고 싶다면 중괄호를 두개 겹쳐서 표현하면 된다. 만약 출력할 값을 중괄호로 감싸서 표현하고 싶다면 중괄호를 세개 겹치면된다.

name = 'Dave'
age = 27

str = '{{}} - {{{0}}}의 나이는 {1}세 입니다'.format(name, age)
print(str)

# {} - {Dave}의 나이는 27세 입니다

문자열 정렬

format() 함수를 사용할 때 문자열을 보기 좋게 정렬할 수 있다.

예를 들어보자.

str = 'this is {0:<10}'.format('left')
print(str)

str = 'this is {0:>10}'.format('right')
print(str)

str = 'this is {0:^10}'.format('center')
print(str)

# this is left      
# this is      right
# this is   center

포맷 문자열의 중괄호 안쪽에 인자의 인덱스를 나타내는 숫자 뒤에 콜론(:) 문자가 붙고 <, >, ^ 문자가 온 다음 숫자가 오는 것을 볼 수 있다. < 문자는 왼쪽 정렬, > 문자는 오른쪽 정렬, ^ 문자는 가운데 정렬을 의미하며, 마지막으로 오는 숫자는 몇 칸을 미리 확보할 것인지를 나타낸다.

위 코드에서 보면 {0:<10}의 의미는 10칸을 확보해서 0번 인자의 값을 출력하되 왼쪽 정렬을 해서 출력하겠다는 의미다.

기본적으로는 공백 문자가 패딩(padding)되어 표현되는데 공백 문자 대신 다른 문자를 패딩할 수도 있다.

str = 'this is {0:-<10}'.format('left')
print(str)

str = 'this is {0:?>10}'.format('right')
print(str)

str = 'this is {0:!^10}'.format('center')
print(str)

# this is left------
# this is ?????right
# this is !!center!!

format() 함수는 콜론 문자 다음에 오는 문자를 패딩한다.

숫자 자리수 패딩

숫자의 자리수도 패딩할 수 있다. 예를 들어 3자리 숫자로 표현할 때 27이란 숫자를 027로 앞에 0을 붙여 표현할 수 있다.

number = 27
str = 'number is {0:03d}'.format(number)
print(str)

number = 1.5543
str = 'number is {0:0.2f}'.format(number)
print(str)

# number is 027
# number is 1.55

{0:03d}의 의미는 0번 인자의 숫자를 표현할 껀데, 정수이고 3자리 숫자로 표현할 것이고 앞쪽에 자리수가 남으면 0으로 채우겠다는 의미다.

비슷하게 소수점 자리도 제한을 할 수 있다. {0:0.2f}는 0번 인자의 숫자를 표현할 껀데, 실수이고 소수점 2째자리까지 표현하겠다는 의미다. 만약 소수점 자리가 남으면 0으로 채워넣는다.

% 서식

파이썬은 좀 더 간단한 방법으로 % 서식을 제공한다. % 문자를 이용해서 원하는 형식으로 포맷팅하는 방법으로 '% + 자료형' % 값의 형식으로 사용한다.

예를 들어보자

name = 'Dave'
str = 'My name is %s' % name
print(str)

# My name is Dave

'My name is %s' 부분이 포맷 문자열이다. 포맷 문자열에서 %s 부분에 문자열 데이터가 들어갈 예정이고, name 변수에 있는 값이 들어간다.

% 서식을 이용할 때에는 자료형별로 어떤 문자를 사용해야하는지 잘 알고 있어야 한다.

자료형 문자 사용할 수 있는 값
정수 %d 숫자(정수, 실수)
실수 %f 숫자(정수, 실수)
문자열 %s 문자열, 숫자
8진수 %o 정수
16진수 %x 정수
% 문자 %% 문자 %

두 개 이상의 값으로 포맷팅을 하려면 두 개 이상의 값을 소괄호로 묶어줘야 한다.

name = 'Dave'
age = 27

str = '%d세 %s 입니다.' % (age, name)
print(str)

# 27세 Dave 입니다.

% 서식을 이용하는 경우도 자리수를 지정할 수 있다. %0Nd 는 정수인데 N자리 숫자로 표기하며 남는 부분은 0으로 채우겠다는 의미다. %0.Nf는 소수점 N자리까지 출력할 것이고 남는 자리는 0으로 채우겠다는 의미다.

% 서식을 이용할 경우 포맷에 적용될 타입을 명확하게 지정해야하므로 다소 불편할 수 있다.

f-string

파이썬 3.6 이상 버전부터 f-string 문법을 사용할 수 있게 되었다. 문자열 앞에 접두사인 f를 붙이고, 중괄호 {} 안에 변수를 넣어서 포맷팅하는 것이다.

예를 들어보자.

name = 'Dave'
age = 27

str = f'{age}세 {name} 입니다.'
print(str)

# 27세 Dave 입니다.

f 문자를 앞에 붙이고 중괄호 안에 변수 이름을 넣어줬다. 그러면 알아서 변수의 값이 치환되어 문자열이 생성된다.

f-string 문법의 가장 큰 장점은 자료형의 변환 없이 문자열과 숫자 값을 함께 다룰 수 있다는 점이다. 


 

파이썬 스크립트 작성에 도움되는 글 모음

파이썬으로 프로그램을 작성할 때 도움되는 글들을 모아본다. 개발환경 [Python] macOS에 파이참 설치 [Python] 파이참 깃허브 연동 [Python] 파이썬 PIP란? [Python] VSCode를 이용한 개발환경 [Python] python3를

hbase.tistory.com

 

댓글