Updated:

파이썬의 문자열 데이터 타입을 정리한 세 번째 글입니다. 이번 포스팅에서는 문자열 포맷팅에 대해서 정리했습니다.

파이썬에서는 복잡한 문자열 출력을 위한 문자열 포맷팅(string formatting)를 지원합니다. 문자열 포맷팅은 문자열 안의 특정한 값을 바꾸어야 할 경우에 사용할 수 있는 방법입니다. 문자열 포맷팅 방법에는 % 포맷팅, format 메서드, 그리고 f-string을 사용하는 방식이 있습니다.

1. %포맷팅Permalink

문자열 뒤에 % 기호를 붙이고 그 뒤에 값을 붙이면, 문자열 안에 값을 삽입할 수 있습니다.
"문자열" % 값
%포맷팅은 위와 같은 형태로 사용할 수 있습니다.

이때, 문자열 안에 % 기호로 시작하는 문자열 포맷 코드를 사용하는데요, 자료형 별로 사용하는 포맷 코드가 다릅니다.

코드 설명
%s 문자열(String)
%c 문자 1개(character)
%d 정수(Integer)
%f 부동소수(floating-point)
%o 8진수
%x 16진수
%% Literal % (문자 % 자체)

1) 정수 바로 대입하기Permalink

>>> "I eat %d apples." % 3
'I eat 3 apples.'

위 예시는 문자열 안에 정수를 삽입하는 방법입니다. 문자열 안에서 숫자를 삽입하고 싶은 자리에 %d 문자를 넣어주고, 숫자는 문자열 뒤의 % 문자 다음에 넣어줍니다.

2) 문자열 바로 대입하기Permalink

>>> "I eat %s apples." % "five"
'I eat five apples.'

문자열 안에 문자열을 삽입하기 위해서는 %s 포맷 코드를 사용해줍니다.

3) 숫자 값의 변수 대입하기Permalink

>>> number = 3
>>> "I eat %d apples." % number
'I eat 3 apples.'

% 뒤에 문자열 대신 변수를 작성해서 변수를 대입할 수 있습니다.

4) 2개 이상의 값 넣기Permalink

>>> number = 10
>>> day = "three"
>>> "I ate %d apples. so I was sick for %s days." % (number, day)
'I ate 10 apples. so I was sick for three days.'

2개 이상의 값을 넣기 위해서는 % 뒤의 괄호 안에 콤마(,)로 구분하여 각각의 값을 넣어 주면 됩니다.

5) %s 포맷코드Permalink

위의 포맷코드 표와 같이, 자료형별로 사용하는 포맷코드가 다릅니다. 그런데 %s 포맷코드는 어떤 형태의 값이든 변환하여 넣을 수 있습니다.

>>> "I have %s apples" % 3
'I have 3 apples'
>>> "rate is %s" % 3.234
'rate is 3.234'

정수를 문자열 안에 삽입하려면 %d를, 3.234를 삽입하려면 %f 코드를 사용해야합니다. 하지만 %s는 자동으로 %뒤의 값을 문자열로 바꿔줄 수 있습니다.

6) 정렬 및 공백Permalink

>>> >>> "Hello %20s" % "python"
'Hello               python'

>>> "%-20s python" % "Hello"
'Hello                python'

포맷 코드를 숫자와 함께 사용할 수도 있습니다. 이떄 포맷코드 안에 숫자를 삽입하게 된다면 정렬과 공백에 활용할 수 있습니다.

%20s는 전체 길이가 20개인 문자열에서, 대입되는 값을 오른쪽으로 정렬하고 그 앞의 나머지는 공백으로 남겨 두라는 의미입니다. 반대로 왼쪽 정렬은 ‘-‘를 붙여서 활용할 수 있습니다. 따라서 위의 예시에서 %-20s는 전체 길이가 20인 문자열에서, 대입되는 값을 왼쪽 정렬하고 나머지는 공백으로 두라는 의미입니다.

7) 소수점 표현하기Permalink

>>> "%0.4f" % 3.42134234
'3.4213'

>>> "%10.4f" % 3.42134234
'    3.4213'

% 뒤의 숫자를 소수점 넷째 자리 까지 표현하고 싶은 경우에는 위와 같이 [0.x]f 형태로 사용합니다. 포맷 문자 내의 소수점(%0.) 뒤의 숫자는 소수점 뒤에 나올 숫자의 개수를 뜻합니다.

포맷 코드 안에서 소수점 앞의 숫자는 정렬과 공백에 활용할 수 있습니다. ‘%10.’는 전체 길이가 10개인 문자열 공간에서 %뒤의 문자를 오른쪽으로 정렬하는 것을 의미합니다.


2. format 메서드Permalink

format 메서드를 사용하여 문자열을 포맷팅할 수도 있습니다. 이떄는 {} 기호를 활용하여 포맷팅합니다. 그리고 %포맷팅과 달리 자료형을 표시할 필요가 없습니다.

1) 숫자 바로 대입하기Permalink

>>> "I eat {0} apples".format(3)
'I eat 3 apples'

{} 항목이 숫자 3으로 바뀌었습니다.

2) 문자열 바로 대입하기Permalink

>>> "I eat {0} apples".format("five")
'I eat five apples'

{} 항목이 문자열 five으로 바뀌었습니다.

3) 숫자 값의 변수 대입하기Permalink

>>> number = 3
>>> "I eat {0} apples".format(number)
'I eat 3 apples'

{}항목이 number 변수값인 3으로 바뀌었습니다.

4) 2개 이상의 값 넣기Permalink

>>> number = 10
>>> day = "three"
>>> "I ate {0} apples. so I was sick for {1} days.".format(number, day)
'I ate 10 apples. so I was sick for three days.'

{0}, {1}과 같은 인덱스 항목이 format 함수의 입력값으로 순서에 맞게 바뀝니다.

5) 이름으로 넣기Permalink

>>> "I ate {number} apples. so I was sick for {day} days.".format(number=10, day=3)
'I ate 10 apples. so I was sick for 3 days.'

인덱스 항목 대신 {name}항목을 활용할 수 있습니다. 이 때 format 메서드에는 name=value 와 같은 형태의 입력값이 있어야 합니다.

6) 정렬 및 공백Permalink

>>> "{0:<10}".format("hi") # 왼쪽 정렬  
'hi        '

>>> "{0:>10}".format("hi") # 오른쪽 정렬  
'        hi'

>>> "{0:^10}".format("hi") # 가운데 정렬  
'    hi    '

왼쪽 정렬은 :<10, 오른쪽 정렬은 :>10, 가운데 정렬은 :^10 을 사용하여 할 수 있습니다. 이떄 숫자는 문자열의 길이를 뜻합니다.

>>> "{0:=^10}".format("hi") # 가운데 정렬하고 '=' 문자로 공백 채우기
'====hi===='
>>> "{0:!<10}".format("hi") # 가운데 정렬하고 '!' 문자로 공백 채우기
'hi!!!!!!!!'

이때 공백을 문자로도 채울 수 있습니다. 채워 넣을 문자를 <, >, ^ 앞에 넣어야 합니다.

7) 소수점 표현하기Permalink

>>> y = 3.42134234
>>> "{0:0.4f}".format(y)
'3.4213'

>>> "{0:10.4f}".format(y)
'    3.4213'

%포맷팅과 마찬가지로 [0.x]f를 활용하여 소수점을 표현합니다. 이떄 소수점 앞자리의 숫자를 바꾸어 문자열의 길이와 공백도 변경할 수 있습니다.

8) 중괄호 표현하기Permalink

>>> "내 이름은 {}입니다.".format("홍길동")
'내 이름은 홍길동입니다.'
>>> "내 이름은 }입니다.".format("홍길동")
'내 이름은 {홍길동}입니다.'

중괄호를 그대로 문자열에 사용하기 위해서는 중괄호 두 개를 연속으로 작성해야 합니다.


3. f-stringPermalink

1) 변수 대입하기Permalink

f 문자열 포맷팅은 문자열 앞에 f 접두사를 붙여서 활용할 수 있습니다.

>>> name = '홍길동'
>>> age = 30
>>> f'나의 이름은 {name}입니다. 나이는 {age}입니다.'
'나의 이름은 홍길동입니다. 나이는 30입니다.'

f 문자열 포맷팅은 변수 값을 생성하고 그 값을 참조할 수 있습니다.

2) 표현식 활용하기Permalink

>>> age = 30
>>> f'나는 내년이면 {age+1}살이 된다.'
'나는 내년이면 31살이 된다.'

또한 +, - 와 같은 표현식을 지원합니다.

3) 딕셔너리 활용하기Permalink

>>> d = {'name':'홍길동', 'age':30}
>>> f'나의 이름은 {d["name"]}입니다. 나이는 {d["age"]}입니다.'
'나의 이름은 홍길동입니다. 나이는 30입니다.'

딕셔너리의 key와 value를 활용하여 f 문자열 포맷팅에서 활용할 수 있습니다.

4) 정렬 및 공백Permalink

f 문자열 포맷팅을 활용한 정렬 및 공백은 format 메서드와 비슷하게 활용할 수 있습니다.

>>> f'{"hi":<10}'  # 왼쪽 정렬
'hi        '
>>> f'{"hi":>10}'  # 오른쪽 정렬
'        hi'
>>> f'{"hi":^10}'  # 가운데 정렬
'    hi    '
>>> f'{"hi":=^10}'  # 가운데 정렬하고 '=' 문자로 공백 채우기
'====hi===='
>>> f'{"hi":!<10}'  # 왼쪽 정렬하고 '!' 문자로 공백 채우기
'hi!!!!!!!!'

5) 소수점 표현하기Permalink

소수점 표현도 format 메서드와 비슷하게 활용할 수 있습니다.

>>> y = 3.42134234
>>> f'{y:0.4f}'  # 소수점 4자리까지만 표현
'3.4213'
>>> f'{y:10.4f}'  # 소수점 4자리까지 표현하고 총 자리수를 10으로 맞춤
'    3.4213'

6) 중괄호 표현하기Permalink

중괄호 표현도 format 메서드와 비슷하게 중괄호를 두 번 작성하여 활용할 수 있습니다.

>>> f''
'{ and }'


Reference


https://wikidocs.net/13#_16
https://datascienceschool.net/01%20python/02.04%20파이썬의%20문자열%20형식화.html

Tags:

Categories:

Updated:

Leave a comment