개요
문자열 포매팅에는 여러 방법이 있습니다.
- printf 스타일 문자열 포매팅 (%연산자)
- 문자열(str)의 format 메서드
- 포맷 문자열 리터럴 (f-string)
2번 또는 3번 방식을 사용하는 게 편합니다.
%연산자
2개 이상의 값을 % 연산자로 표현하려면 ()로 감싸야합니다.
% s는 어떤 형태의 값이든 문자열로 자동으로 변환해 줄 수 있습니다.
name = "John"
age = 20
text = "My name is %s." % name
print(text)
text = "My name is %s. I am %d years old." % (name, age)
print(text)
# 다음과 같이 출력됩니다.
'''
My name is John.
My name is John. I am 20 years old.
'''
정렬
좌측 정렬, 우측 정렬이 가능합니다.
name = "John"
# 우측 정렬
text = "%10s" % name
print(text)
# 좌측 정렬
text = "%-10s" % name
print(text)
# 다음과 같이 표시됩니다.
'''
John
John
'''
소수점 표현하기
text = "%0.4f" % 3.42134234
print(text)
# 다음과 같이 표시됩니다.
'''
3.4213
'''
문자열(str)의 format 메서드
기본적으로 다음과 같이 사용할 수 있습니다.
name = "John"
age = 20
text = "My name is {}.".format(name)
print(text)
text = "My name is {}. I am {} years old.".format(name, age)
print(text)
# 다음과 같이 표시됩니다.
'''
My name is John.
My name is John. I am 20 years old.
'''
인덱스 번호를 붙여서 사용할 수 있습니다.
name = "John"
age = 20
text = "My name is {0}.".format(name)
print(text)
text = "My name is {0}. I am {1} years old.".format(name, age)
print(text)
# 인덱스 번호에 맞는 변수가 사용된다.
text = "My name is {1}. I am {0} years old.".format(age, name)
print(text)
# 다음과 같이 출력됩니다.
'''
My name is John.
My name is John. I am 20 years old.
My name is John. I am 20 years old.
'''
이름을 붙여서 사용할 수도 있습니다.
인덱스 번호와 이름을 섞어서도 사용할 수 있습니다.
name = "John"
age = 20
text = "My name is {myName}.".format(myName = name)
print(text)
text = "My name is {myName}. I am {myAge} years old.".format(myName = name, myAge = age)
print(text)
# 다음과 같이 출력됩니다.
'''
My name is John.
My name is John. I am 20 years old.
'''
정렬
좌측 정렬, 가운데 정렬, 우측 정렬이 가능합니다.
# 좌측 정렬
text = "{:<10}".format("text")
print(text)
# 가운데 정렬
text = "{:^10}".format("text")
print(text)
# 우측 정렬
text = "{:>10}".format("text")
print(text)
# 다음과 같이 출력됩니다.
'''
text
text
text
'''
공백 채우기
정렬시 공백 문자 대신에 지정한 문자를 채우는 것이 가능합니다.
채울 문자는 정렬문자 <, ^, > 앞에 와야 합니다.
# 좌측 정렬
text = "{:_<10}".format("text")
print(text)
# 가운데 정렬
text = "{:=^10}".format("text")
print(text)
# 우측 정렬
text = "{:*>10}".format("text")
print(text)
# 다음과 같이 출력됩니다.
'''
text______
===text===
******text
'''
소수점 표현하기
num = 3.42134234
# 소수점 표현
text = "{0:0.4f}".format(num)
print(text)
# 소수점 표현, 자릿수
text = "{0:10.4f}".format(num)
print(text)
# 공백 채우기, 정렬, 자릿수, 소수점 표현
text = "{0:+^10.4f}".format(num)
print(text)
# 다음과 같이 출력됩니다.
'''
3.4213
3.4213
++3.4213++
'''
f-string
문자열 앞에 f 접두사를 붙여 사용할 수 있습니다.
name = "John"
text = f"My name is {name}"
print(text)
# 다음과 같이 표시됩니다.
'''
My name is John
'''
정렬
좌측 정렬, 가운데 정렬, 우측 정렬이 가능합니다.
name = "John"
# 좌측 정렬
text = f"My name is {name:<10}"
print(text)
# 가운데 정렬
text = f"My name is {name:^10}"
print(text)
# 우측 정렬
text = f"My name is {name:>10}"
print(text)
# 다음과 같이 실행됩니다.
'''
My name is John
My name is John
My name is John
'''
공백
정렬시 공백 문자 대신에 지정한 문자를 채우는 것이 가능합니다.
채울 문자는 정렬문자 <, ^, > 앞에 와야 합니다.
name = "John"
# 좌측 정렬
text = f"My name is {name:_<10}"
print(text)
# 가운데 정렬
text = f"My name is {name:=^10}"
print(text)
# 우측 정렬
text = f"My name is {name:*>10}"
print(text)
# 다음과 같이 출력됩니다.
'''
My name is John______
My name is ===John===
My name is ******John
'''
소수점 표현하기
num = 3.42134234
# 소수점 표현
text = f"{num:0.4f}"
print(text)
# 소수점 표현, 자릿수
text = f"{num:10.4f}"
print(text)
# # 공백 채우기, 정렬, 자릿수, 소수점 표현
text = f"{num:+^10.4f}"
print(text)
# 다음과 같이 출력됩니다.
'''
3.4213
3.4213
++3.4213++
'''
정리
% 연산자 | name = "John" text = "My name is %s." % name print(text) |
format 메서드 | name = "John" text = "My name is {0}.".format(name) print(text) |
f -string | name = "John" text = f"My name is {name}" print(text) |
추가로, 정렬, 공백 문자 채우기, 소수점 표현하기가 가능합니다.
참고자료
https://docs.python.org/ko/3/library/stdtypes.html#printf-style-string-formatting
https://docs.python.org/ko/3/reference/lexical_analysis.html#formatted-string-literals
https://docs.python.org/ko/3/library/stdtypes.html?highlight=str#str.format
'python > basic' 카테고리의 다른 글
[Python] 연산자(Operators) - (2) 할당 연산자 (0) | 2023.05.31 |
---|---|
[Python] 연산자(Operators) - (1) 산술 연산자 (0) | 2023.05.31 |
[Python] 객체의 메모리 크기 확인 (0) | 2023.05.30 |
[Python] Built-in Data Types (자료형) (0) | 2023.05.30 |
[Python] global 키워드 (0) | 2023.05.30 |