본문 바로가기
python/basic

[Python] 문자열 포매팅

by wjwkddyd221001 2023. 5. 31.

개요

문자열 포매팅에는 여러 방법이 있습니다.

  1. printf 스타일 문자열 포매팅 (%연산자)
  2. 문자열(str)의 format 메서드
  3. 포맷 문자열 리터럴 (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://wikidocs.net/13

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