[Python] 문자열 자료형(3) - 문자열 포매팅
문자열 포매팅
- 문자열에서 또 하나 알아야 할 것으로는 ‘문자열 포매팅(string formatting)이 있음
- 예를 들어, 아래의 두 문장이 있다고 가정하였을 때,
- “현재 온도는 18도 입니다.”
- “현재 온도는 20도 입니다.”
- 두 문자열은 모두 같은데 20이라는 숫자와 18이라는 숫자만 다름!
- 이렇게 문자열 안의 특정한 값을 바꿔야 할 경우가 있을 때 이것을 가능하게 해주는 것이 문자열 포매팅
문자열 포매팅 사용하기
1. 숫자에 바로 대입
a = "I eat %d apples." % 3
print(a) # I eat 3 apples.
- 위 예제는 문자열 안에 정수 3을 삽입하는 방법을 보여줌
- 문자열 안의 숫자를 넣고 싶은 자리에
%d
문자를 넣어주고 삽일할 숫자 3은 가장 뒤에 있는 % 문자 다음에 써 넣음 - 여기에서
%d
는 ‘문자열 포맷 코드’라고 부름
2. 문자열 바로 대입
-
문자열 안에 꼭 숫자만 넣어야 할 필요는 없음! 문자열을 넣을 수도 있음
a = "I eat %s apples." %'five' print(a) # I eat five apples.
-
문자열 안에 또 다른 문자열을 삽입하기 위해서는
%d
가 아닌%s
를 써야함
3. 숫자 값을 나타내는 변수로 대입
number = 3
a = "I eat %d apples." % number
print(a) # I eat 3 apples.
- 1번처럼 숫자를 바로 대입하든, 숫자 값을 나타내는 변수를 대입하든 결과는 같음
4. 2개 이상의 값 넣기
number = 10
day = "three"
a = "I ate %d apples. so I was sick for %s days." %(number, day)
print(a) # I ate 10 apples. so I was sick for three days.
- 2개 이상의 값을 넣으려면 마지막 % 다음 괄호 안에 쉼표(,)로 구분하여 각각의 값을 넣어주면 됨!
문자열 포맷 코드
코드 | 설명 |
---|---|
%s | 문자열(string) |
%c | 문자 1개(character) |
%d | 정수(integer) |
%f | 부동소수(floating-point) |
%o | 8진수 |
%x | 16진수 |
%% | Literal %(문자 % 자체) |
- 문자열 포맷 코드는 다양한 코드가 존재
-
여기서
%s
포맷 코드는 어떤 형태의 값이든 변환해서 넣을 수 있음!a = "I have %s apples" % 3 b = "rate is %s" % 3.234 print(a) # I have 3 apples print(b) # rate is 3.234
- 3을 문자열 안에 삽입하려면
%d
, 3.234를 삽입하려면%f
를 사용해야 함 - 하지만
%s
를 사용하면%s
는 자동으로 %뒤에 있는 값을 문자열로 바꾸어 대입함!
- 3을 문자열 안에 삽입하려면
포매팅 연산자
%d
와 %을 같이 쓸 때는%%
을 사용e = "Error is %d%." % 98
결과 값이 “Error is 98%.”가 출력될 것이라고 생각하지만 파이썬은 ‘형식이 불완전하다’라는 오류 메세지를 보여줌
Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: incomplete format
그 이유는 ‘문자열 포맷 코드인
%d
와 %가 같은 문자열 안에 존재하는 경우, %를 나타내기 위해서는 반드시%%
을 사용해야함!e = "Error is %d%%." % 98 print(e) # Error is 98%.
- 포맷팅 연산자가 없다면 %만 사용하면 그대로 출력됨!
포맷 코드와 숫자 함께 사용하기
1. 정렬과 공백
a = "%10s" % "hi"
print(a) # hi
%10s
는 전체 길이가 10개인 문자열 공간에서 대입되는 값을 오른쪽으로 정렬하고 그 앞의 나머지는 공백으로 남겨두라는 의미
-
빈대쪽인 왼쪽 정렬은 %-10s로 표현할 수 있음
b = "%-10sjane." % "hi" print(b) # hi jane.
2. 소수점 표현하기
a = "%0.4f" % 3.42134234
print(a) # 3.4213
- 3.421343234를 소수점 네 번째 자리까지만 나태니고 싶은 경우에는 위와 같이 작성
%0.4f
에서 ‘.’는 소수점 포인트, 그 뒤의 숫자 4는 소수점 뒤에 나올 숫자의 개수를 말함- 소수점 포인트 앞으 숫자는 문자열의 전체 길이를 의미하는데,
%0.4f
에서 사용한 숫자 0은 길이에 상관하지 않겠다는 의미 -
아래 예시의 경우 숫자 3.421343234를 소수점 네 번째 자리까지만 표시하고 전체 길이가 10개인 문자열 공간에서 오른쪽으로 정렬
a = "%10.4f" % 3.42134234 print(a) # 3.4213
format 함수를 사용한 포매팅
- 문자열의 format 함수를 사용하면 좀 더 발전된 스타일로 문자열 포맷을 지정할 수 있음
- 앞에서 본 문자열 포매팅 예제를 format 함수를 사용하여 바꾸면 다음과 같음
숫자/문자열 바로 대입
a = "I eat {0} apples".format(3)
b = "I eat {0} apples".format('five')
print(a) # I eat 3 apples
print(b) # I eat five apples
- 문자열의
{0}
부분이 숫자 3과 문자열 ‘five’로 바뀜
변수 대입하기
number = 3
b = "I eat {0} apples".format(number)
print(b) # I eat 10 apples
- 문자열의
{0}
부분이 number 변수의 값인 3으로 바뀜
2개 이상의 값 넣기
number = 10
day = "three"
a = "I ate {0} apples. so I was sick for {1} days." %(number, day)
print(a) # I ate 10 apples. so I was sick for three days.
- 2개 이상의 값을 넣을 경우, 문자열의
{0}
,{1}
과 같은 인덱스 항목이 format 함수의 입력값으로 순서에 맞게 바뀜 - 위의 예시에서
{0}
은 format 함수의 첫 번째 입력값인number
,{1}
은 format 함수의 두 번째 입력값인day
로 바뀜
이름으로 넣기
a = "I ate {number} apples. so I was sick for {day} days." %(number=10, day=3)
print(a) # I ate 10 apples. so I was sick for 3 days.
{0}
,{1}
과 같은 인덱스 항목 대신 더 편리한{name}
의 형태를 사용하는 방법도 있음{name}
형태를 사용할 경우, format 함수에는 반드시 name=value와 같은 형태의 입력값이 있어야 함
인덱스와 이름을 혼용해서 넣기
a = "I ate {0} apples. so I was sick for {day} days." %(10, day=3)
print(a) # I ate 10 apples. so I was sick for 3 days.
- 인덱스 항목과 name=value 형태를 혼용하는 것도 가능
왼쪽/가운데/오른쪽 정렬
a = "'{0:<10}'".format("hi")
b = "'{0:^10}'".format("hi")
c = "'{0:>10}'".format("hi")
print(a) # 'hi '
print(b) # ' hi '
print(c) # ' hi'
:<10
표현식을 사용하면 치환되는 문자열을 왼쪽으로 정렬하고 문자열의 총 자릿수를 10으로 맞출 수 있음- 마찬가지로 가운데 정렬은
:^
, 오른쪽 정렬은:>
를 사용하면 됨
공백 채우기
d = "'{0:=^10}'".format("hi")
e = "'{0:!<10}'".format("hi")
print(d) # '====hi===='
print(e) # 'hi!!!!!!!!'
- 정렬할 때 공백 문자 대신 지정한 문자 값으로 채워 넣을 수 있음
- 채워 넣을 문자 값은 정렬 문자
<
,^
,>
바로 앞에 넣어야 함
소수점 표현하기
y = 3.42134234
a = "{0:0.4f}".format(y)
print(a) # 3.4213
b = "{0:10.4f}".format(y)
print(b) # 3.4213
- format 함수를 사용해 소수점을 4자리까지만 표현할 수 있고, 자릿수를 10으로 맞출 수도 있음
{또는} 문자 표현하기
a = "".format()
print(a) # { and }
- format 함수를 사용해 문자열을 표매팅할 경우,
{}
와 같은 중괄호 문자를 포매팅 문자가 아닌 문자 그대로 사용하고 싶은 경우에는 위 예의 `` 처럼 2개를 연속해서 사용하면 됨
f 문자열 포매팅
- 파이썬 3.6 버전부터는 f 문자열 포매팅 기능을 사용할 수 있음(3.6 미만의 버전에서는 사용 불가)
-
다음과 같이 문자열 앞에 f 접두사를 붙이면 f 문자열 포매팅 기능을 사용할 수 있음
name = '이두부' age = 6 say = f'나의 이름은 {name}입니다. 나이는 {age}살입니다.' print(say) # 나의 이름은 이두부입니다. 나이는 6살입니다.
- f 문자열 포매팅은 위와 같이 name, age와 같은 변수값을 생성한 후에 그 값을 참조할 수 있음
-
또한 f 문자열 포매팅은 표현식을 지원하기 때문에 다음과 같이 사용할 수 있음
age = 6 say = f'나는 내년이면 {age + 1}살이 된다.' print(say) # 나는 내년이면 7살이 된다.
-
딕셔너리
dic = {'name': '이두부', 'age':6} say = f'나의 이름은 {dic["name"]}입니다. 나이는 {dic["age"]}살입니다.' print(say) # 나의 이름은 이두부입니다. 나이는 6살입니다.
-
정렬
a = f'{"hi":<10}' # 왼쪽 정렬 b = f'{"hi":^10}' # 가운데 정렬 c = f'{"hi":>10}' # 오른쪽 정렬 print(a) # hi print(b) # hi print(c) # hi
-
공백 채우기
d = f'{"hi":=^10}' # 가운데 정렬하고 '='로 공백 채우기 e = f'{"hi":!<10}' # 왼쪽 정렬하고 '!"로 공백 채우기 print(d) # ====hi==== print(e) # hi!!!!!!!!
-
소수점
y = 3.42134234 a = f"{y:0.4f}" # 소수점 4자리까지만 표현 print(a) # 3.4213 b = f"{y:10.4f}" # 소수점 4자리까지 표현하고 총 자리수를 '10'으로 맞춤 print(b) # 3.4213
-
f 문자열에서 {} 문자 그대로 표현하기
a = f"" print(a) # { and }
댓글남기기