[파이썬] 문자열 포매팅 방법
문자열 포매팅이란?
문자열을 만들 때 원하는 위치에 특정한 값을 삽입해서 문자열을 재사용하여 출력하는 것을 의미한다.
예를 들어 구구단을 만들때 % 서식문자를 이용해 문자열을 포매팅한다고 하면
1 x 1 = 1
1 x 2 = 2
이처럼 1과 x , = 은 공통적이다 이럴 때 우리는 문자열 포매팅을 사용하여
print('1 x %d = %d' % (num,num*1)) 처럼 사용하고 num값을 반복문을 이용하여 1부터 9까지 반복하게 하면 구구단을 출력할 수 있다.
문자열 포매팅 방법에는 3가지가 존재한다.
1. % 서식문자
2. str.format
3. f-string
1. % 서식문자
ex)
num = 50
s = 'my age %d' % num => 'my age 50'
% 기호 뒤에는 자료형을 가리키는 문자가 온다
%s -> 문자열
%d -> 정수
%f -> 실수
만약 문자%를 표현하고 싶다면 %%를 사용하면 된다.
포매팅해야할 변수 값이 두 개 이상이라면 ()를 이용한다
s = 'my name is %s. age : %d' % ('transfer', 21)
print(s1) => 'my name is transfer. age : 21'
% 를 이용한 문자열 포매팅은 타입을 정해주기 때문에 정확하지만 반대로 타입을 정해야 하기 때문에 불편한 점도 존재한다.
2. str.format()
'{인덱스0},{인덱스1}'.format(값0,값1) 의 형태로 사용한다.
ex)
a = 1
b = 2
s = '{0} x {1} = {2}'.format(a, b, a * b) => '1 x 2 = 2'
인덱스는 0부터 시작하여 사용하면 된다.
format은 직접 대입하는 방법도 있지만 변수로 대입하는 방법, 이름으로 대입하는 방법도 존재한다.
변수로 대입하는 방법
ex)
age = 20
s = 'age : {0}'.format(age) => 'age : 20'
이름으로 대입하는 방법
ex)
s = 'number : {num}, gender : {gen}'.format(num=1, gen='남') =>'number : 1, gender : 남'
만약 format 인덱스를 입력하지 않으면 format 인자 순서대로 들어가게 된다.
ex)
s = 'name : {}, city : {}'.format('transfer', 'incheon') => 'name : transfer, city : incheon'
인덱스를 중복해서 입력하면 해당하는 인자 값이 또 들어가게 된다.
ex)
s = 'test1 : {0}, test2 : {1}, test3 : {0}'.format('0','1') => 'test1 : 0, test2 : 1, test3 :0'
format 함수를 사용할 때 중괄호가 나오게 하려면 중괄호를 두번 겹쳐서 사용하면 된다.
ex)
s = '{{}}, {}'.format('test') => '{}, test'
format 함수를 이용해 문자열 정렬하기
ex)
# 왼쪽 정렬
s = '{0:<10} |{1:<5}|'.format('left', 'a') => 'left |a |'
# 오른쪽 정렬
s = '{0:>10} |{1:>5}|'.format('right', 'a') => ' right| a|'
# 가운데 정렬
s = '{0:^10} |{1:^5}|'.format('center', 'a') => ' center | a |'
왼쪽 정렬에는 기호 < 를 사용하고, 오른쪽 정렬에는 >, 가운데 정렬에는 ^를 사용합니다.
기호 뒤에 나오는 숫자는 자릿수를 말합니다.
즉 아래와 같습니다.
{0:<10} 이 뜻하는 것은 {0} 값을 ":<10" 10자리로 표현할건데 왼쪽 정렬을 할 것이다. 라는 뜻 이고
{1:>5} 가 뜻하는 것은 {1} 값을 ":>5" 5자리로 표현할건데 오른쪽 정렬을 할 것이다. 입니다.
만약 문자열에 공백이 아닌 값을 채우고 싶다면 <,>,^ 기호 앞에 특정문자를 입력하면 공백 부분이 다른 것으로 채워지게 된다.
format 함수를 이용해 자리수와 소수점 표현하기
ex)
# 정수 N자리
s = '정수 3자리 : {0:03d}, {1:03d}'.format(12345, 12) => '정수 3자리 : 12345, 012'
# 소수점 N자리
s = '아래 2자리 : {0:0.2f}, 아래 5자리 : {1:0.5f}'.format(123.1234567, 3.14)
=> '아래 2자리 : 123.12, 아래 5자리 : 3.14000'
정수의 자리수를 표현할때는 '0Nd'로 표현한다. 여기서 N은 원하는 자릿수를 입력하면 된다. 자릿수가 부족한 경우에는 자동으로 0으로 채워진다.
또한 소수점 자리수를 표현할 때는 '0.Nf'로 표현한다. N은 소수점 아래 표시할 자릿수를 입력하면 된다. 이것도 마찬가지로 남는 부분은 0으로 표시된다.
3. f-string 포매팅
f'문자열 {변수} 문자열' 의 형식으로 사용한다
ex)
# 문자열 맨 앞에 f를 붙이고, 출력할 변수, 값을 중괄호 안에 넣습니다.
s = '1월'
n = 4
result1 = f'이번달은 {s}입니다. 오늘은 {n}일 입니다.' => '이번달은 1월입니다. 오늘은 4일 입니다'
f-string도 fomat처럼 왼쪽, 오른쪽, 가운데 정렬이 가능하다.
# f-string 왼쪽 정렬
s = 'left'
result1 = f'|{s1:<10}|' => '|left |'
# f-string 오른쪽 정렬
s = 'right'
result3 = f'|{s3:>10}|' => '| right|'
# f-string 가운데 정렬
s = 'center'
result2 = f'|{s2:^10}|' => '| center |'
딕셔너리와 f문자열 포맷을 함께 이용하려면 중괄호 안에서 딕셔너리를 호출해주면 된다.
# f-string과 딕셔너리
d = {'name': 'transfer', 'gender': 'man', 'age': 20}
result = f'{d["name"]}, {d["gender"]}, {d["age"]}' => 'tranfer, man, 20'
리스트도 딕셔너리와 비슷하게 중괄호안에 리스트를 접근할 수 있다
# f-string과 리스트
n = [100, 200, 300]
print(f'list : {n[0]}, {n[1]}, {n[2]}') 'list : 100, 200, 300'