Python 문자열 포매팅 하기 ( %, format, f-string )

파이썬에서 문자열 포매팅하는 방법 3가지 살펴보겠습니다.

 

1. % Operator

%연산자와 포맷 스트링으로 사용합니다.

대표적인 포맷 스트링 %d(정수), %s(문자열), %f(실수) 으로 예제 살펴보겠습니다.

print('%s is %d years old and %fcm' % ('Aiden', 17, 176.5));
  # 'Aiden is 17 years old and 176.5cm'

포맷 스트링을 문자열 사이사이에 입력해두고 해당 포맷 스트링 위치에 들어갈 내용을

문자열 종료후 %연산자 뒤 괄호 안에 순서대로 넣어줍니다.

print('My name is %s' % ('Matthew'));
# 'My name is Matthew'

 

 

 

%연산자와 포맷 알파벳 사이에 숫자를 넣어 공간을 확보할 수도 있습니다.

print('hello nice to meet you,%5s', % 'Robin');
# 'hello nice to meet you,Robin'  ( 5칸 공간확보 - 글자가 5개라 빈공간없음 )

print('hello nice to meet you,%7s', % 'Robin');
# 'hello nice to meet you,  Robin'  ( 7칸 공간확보 - 글자가 5개라 2칸공백 )

print('hello nice to meet you,%9s', % 'Robin');
# 'hello nice to meet you,    Robin'  ( 9칸 공간확보 - 글자가 5개라 4칸공백 )

 

공간 표시 숫자 앞에 0을 넣으면 공간의 빈부분을 0으로 표시해줍니다.

print('price %05d', % (5));
# 'price 00005'  ( 5칸 공간확보 및 빈공간 0으로표시 )

print('price %06d', % (40));
# 'price 000040'  ( 6칸 공간확보 및 빈공간 0으로표시 )

print('price %07d', % (3720));
# 'price 0003720'  ( 7칸 공간확보 및 빈공간 0으로표시 )

 

 

2. Str.format

파이썬3 이후부터 지원하는 방법입니다.

%와 동일한 기능을 제공하지만 타입과 상관없이 {} 괄호와 값을 가지고 사용합니다

 

print('{} is {} years old and {}cm'.format('Aiden', 17, 176.5));
  # 'Aiden is 17 years old and 176.5cm'

괄호 내에 순서를 지정하거나 이름을 지정해주어 사용할 수 있습니다.

print('{2} is {1} years old and {0}cm'.format(176.5, 17, 'Aiden'));
  # 'Aiden is 17 years old and 176.5cm'
  
print('{name} is {age} years old and {height}cm'.format(name='Aiden', age=17, height=176.5));
  # 'Aiden is 17 years old and 176.5cm'

 

공간 확보 및 0으로 채우기 기능도 당연히 지원합니다.

print('num [{0:>7d}]'.format(123));  # >7d 오른쪽(>)으로 밀어서 출력 (7칸)
# 'num [    123]'
print('num [{0:<7d}]'.format(123));  # <7d 왼쪽쪽(<)으로 밀어서 출력 (7칸)
# 'num [123    ]'

print('num [{0:>07d}]'.format(123));  # >07d 오른쪽(>)으로 밀어서 출력 빈칸은0으로 (7칸)
# 'num [0000123]'
print('num [{0:<07d}]'.format(123));  # <07d 왼쪽(>)으로 밀어서 출력 빈칸은0으로 (7칸)
# 'num [1230000]'

 

3. f-String

파이썬 3.6 이후부터 지원하는 방법입니다.

문자열 앞에 f 문자를 추가하시고 괄호 {} 안에 바로 변수명을 적어주시면 됩니다.

 

name = 'Aiden'
print(f'My name is {name}');
# 'My name is Aiden'

내부에서 함수 호출 및 정수끼리의 산술도 가능합니다.

name = 'Aiden';
print(f'My name is {name.upper()}');
# 'My name is AIDEN'

num1 = 3;
num2 = 5;
print(f'the number is {num1 + num2}');
# 'the number is 8'

 

3가지 문자열 포매팅함수를 알려드렸는데요 어떤 방법을 크게 상관은 없습니다만

저는 3 > 2 > 1 순으로 추천을 드립니다. ( 최근에 나온 게 역시 더 좋지요... )

사용법, 성능, 가독성 어느면에서도 f-String 이 좋다고 생각됩니다.

최근에 나온것이라 그럴까요, 버전이 맞다면 f-String 사용하시는 걸 권장드립니다.