파이썬(Python) F-문자열 사용법과 format() 함수 사용법
format() 함수
format()함수는 문자열을 출력할 때 서식 지정자(format identifier)를 사용하여 출력하고자 하는 경우에 사용합니다.
str.format()함수의 인자값을 중괄호{}가 지정된 위치에 순차적으로 값을 대입합니다. 예제 코드를 하나씩 살펴보면서 확인해볼까요?
c = "{0}. 너의 이름은?".format(a) print(c) #출력결과 1. 너의 이름은?
format()함수의 인자값으로 여러개의 변수를 받아서 처리하는 경우, 인덱스 값으로 기준을 정합니다. 인덱스의 시작값은 0부터 시작됩니다.
a = 1 b = 2 c = "{0} 더하기 {1}은 {2}입니다.".format(a, b, a+b) print(c) #출력결과 1 더하기 2은 3입니다.
중괄호{}안의 인덱스는 생략이 가능합니다. a 가 첫번째 중괄호에 매칭됩니다. 순차적으로 b, 그리고 a+b가 매칭됩니다.
a = 1 b = 2 c = "{} 더하기 {}은 {}입니다.".format(a, b, a + b) print(c) #출력결과 1 더하기 2은 3입니다.
for문을 사용해서 출력해볼까요?
for i in range(1, 10): print('{0}의 제곱은? {1}'.format(i, i*i)) #출력결과 1의 제곱은? 1 2의 제곱은? 4 3의 제곱은? 9 4의 제곱은? 16 5의 제곱은? 25 6의 제곱은? 36 7의 제곱은? 49 8의 제곱은? 64 9의 제곱은? 81
아래와 같은 방법으로도 사용할 수 있어요.
str = "나는 {0}년 까지 {1}에 살았어요. {1}은 참 커요. {0}년 여름의 서울은 행복했습니다.".format(2019, "서울") print(str) #출력결과 나는 2019년 까지 서울에 살았어요. 서울은 참 커요. 2019년 여름의 서울은 행복했습니다.
중괄호 안에 인덱스값 대신 이름으로 지정하여 값을 매칭시킬 수 있습니다. 가독성이 좋다는 장점이 있습니다. 단점은 타이핑 글자수가 늘어난다????
str = "나는 {year}년 까지 {area}에 살았어요.".format(year=2019, area="서울") print(str) #출력결과 나는 2019년 까지 서울에 살았어요.
이름으로 지정하여 중괄호를 설정한 경우 반드시 format()함수 호출시 키이름을 지정해주고 값을 매칭해줘야합니다. 그렇지 않으면 KeyError 오류를 만나게 됩니다.
str2 = "나는 {year}년 까지 {area}에 살았어요.".format(2019, "서울") print(str2) #실행결과 오류 발생 Traceback (most recent call last): File "C:\python\Workspace\main.py", line 12, in <module> str2 = "나는 {year}년 까지 {area}에 살았어요.".format(2019, "서울") KeyError: 'year'
중괄호를 출력할려면 어떻게 해야할까요? 중괄호를 3개를 사용해야 합니다.
str = "나는 {{{0}}}년 까지 {1}에 살았어요.".format(2019, "서울") print(str) #출력결과 나는 {2019}년 까지 서울에 살았어요.
출력 문자열을 정렬할 수 있어요. 포맷 지정자 뒤의 숫자는 자릿수를 의미합니다. 정수만 가능합니다. 마이너스 기호를 넣으면 안되요. 오류를 만나게됩니다. 아래 코드 스니펫의 출력결과와 같이 “물체”를 기준으로 20개의 공백을 출력합니다. 아스키코드로 그림을 그리는 사람들이 있어요. 그런 그림 그릴때 유용할 수 있겠네요.
포맷 지정자 | 내용 |
< | 왼쪽정렬 |
> | 오른쪽 정렬 |
^ | 가운데 정렬 |
str = "왼쪽정렬 예제 | {0:<20} |".format("물체") print(str) str = "오른쪽 정렬 예제 | {0:>20} |".format("물체") print(str) str = "가운데 정렬 예제 | {0:^20} |".format("물체") print(str) #실행결과 왼쪽정렬 예제 | 물체 | 오른쪽 정렬 예제 | 물체 | 가운데 정렬 예제 | 물체 |
음수를 사용하게되면 ValueError: Sign not allowed in string format specifier 오류를 만나게 됩니다.
str = "왼쪽정렬 예제 | {0:<-20} |".format("물체") print(str) #실행결과 Traceback (most recent call last): File "C:\python\Workspace\main.py", line 4, in <module> str = "왼쪽정렬 예제 | {0:<-20} |".format("물체") ValueError: Sign not allowed in string format specifier
포맷 지정자 앞에 기호나 문자를 넣어서 문자열에 공백이 아닌 값으로 채울 수 있습니다.
str = "왼쪽정렬 예제 | {0:-<20} |".format("물체") print(str) str = "오른쪽 정렬 예제 | {0:=>20} |".format("물체") print(str) str = "가운데 정렬 예제 | {0:+^20} |".format("물체") print(str) str = "{0:a^20}".format("물체") print(str) #출력결과 왼쪽정렬 예제 | 물체------------------ | 오른쪽 정렬 예제 | ==================물체 | 가운데 정렬 예제 | +++++++++물체+++++++++ | aaaaaaaaa물체aaaaaaaaa
F-문자열(f-string)
문자열 포맷팅 방법으로 파이썬 언어가 버전업 되면서 도입이 된 f-문자열 포맷팅에 대해 알아봅니다. f-문자열(f-string)을 사용하려면 문자열에 포함할 변수를 중괄호로 묶고 문자열에 f접두어를 붙여서 사용합니다. format()함수나 %문자열 렌더링 연산자 보다 렌더링이 훨씬 빠르다고 전해집니다. format()함수 보다 2배 빠릅니다. F-문자열 사용을 강력히 추천합니다.
f’문자열 {변수}’
year = 2019 area ="서울" print(f'나는 {area}에 살았어요.') str = f'나는 {year}년 까지 {area}에 살았어요. {area}은 참 커요. {year}년 여름의 서울은 행복했습니다.' print(str) #출력결과 나는 서울에 살았어요. 나는 2019년 까지 서울에 살았어요. 서울은 참 커요. 2019년 여름의 서울은 행복했습니다.
리스트(list) 값을 f-string을 사용하여 출력해볼까요? for문 사용해서도 가능하겠죠?
list = [10, 20, 30, 40, 50] print(f'리스트 : {list[0]}, {list[1]} {list[2]}') for i in list: print(f'리스트 값: {i}') #출력결과 리스트 : 10, 20 30 리스트 값: 10 리스트 값: 20 리스트 값: 30 리스트 값: 40 리스트 값: 50
딕셔너리(dictionary) 객체를 f-string을 사용하여 출력해봅니다.
dict = {"name": "IU", "area": "서울"} print(f'이름 : {dict["name"]}, 사는곳 :{dict["area"]}') #출력결과 이름 : IU, 사는곳 :서울
소수점 N자리 표기 관련하여 format()함수의 또 다른 사용방법은 아래 블로그 글을 참고하세요.
[REFERENCE]
docs.python.org/ko/3/library/string.html#formatstrings