우와한 개발자

[Python] 포맷팅(출력형식지정)- format(), %, f-string

by 우와한개발자

  • 포맷팅(formatting) :숫자, 문자, 날짜 데이터에 형식을 지정하는 것

1. 포맷 코드 : %

"문자열 %[옵션][자리수][.소수점자리]타입" % 값

# 여러개 가능
"문자열 %타입 %타입" % (값1, 값2)

1) 옵션

옵션 의미 예시  결과
- 왼쪽 정렬 "%-10s" % "cat" cat
+ 부호 표시 "%+d" % 10 +10
0 0으로 채움 "%05d" % 3 00003
(공백) 양수 앞 공백 "% d" % 10 10

 

2) 자리수와 소수점자리 형식

형식 의미 예시 결과
%10s 전체 10칸 "%10s" % "cat" cat
%.2f 소수 2자리 "%.2f" % 3.14159 3.14
%10.2f 10칸 + 소수2 "%10.2f" % 3.1 3.10

 

3) 타입/포맷코드

타입 의미 예시 결과
d 정수 "%d" % 10 10
f 실수 "%f" % 3.14 3.140000
s 문자열 "%s" % "hi" hi
c 문자 "%c" % 65 A
o 8진수 "%o" % 10 12
x 16진수 "%x" % 255 ff
print("%5s" % "ab")      #    ab  (문자열 오른쪽 정렬, 전체 5칸)
print("%-5s" % "ab")     # ab     (문자열 왼쪽 정렬)

print("%5d" % 12)        #    12  (정수 오른쪽 정렬, 전체 5칸)
print("%05d" % 12)       # 00012  (빈칸을 0으로 채움)

print("%5.2f" % 3.14159) #  3.14  (전체 5칸, 소수점 2자리)
print("%.2f" % 3.14159)  # 3.14   (소수점 2자리)

print("%c" % "A")        # A      (문자 1개)
print("%s" % "hello")    # hello  (문자열)

print("%o" % 10)         # 12     (8진수)
print("%x" % 255)        # ff     (16진수 소문자)
print("%X" % 255)        # FF     (16진수 대문자)

print("할인율: 10%%")     # 할인율: 10% (% 문자 출력)

 

2. format()

'{[인덱스]:[공백대체문자][정렬방법][자리수][타입]}'.format(변수명)

print('{:*<10}'.format('cat')) #cat*******
print('{1:@^5d}'.format('hello python',123)) #@123@

1) 인덱스

  • format()에 넣은 값의 순서

 

2) 공백대체문자

  • 자리수 지정시 빈칸을 다른 문자로 채울수 있음
  • ⚠️반드시 문자1개여야하고 정렬기호(<,>,^)과 같이 써야함

 

3) 정렬방법 

기호 의미
< 왼쪽 정렬
> 오른쪽 정렬
^ 가운데 정렬

 

4) 자리수

  • 전체 출력할 최소 자리수
  • 자리수 넘으면 그대로 출력되나 모자른 경우 공백이나 공백대체문자로 출력
  • .숫자
형식 출력 의미
'{:.3}'.format('abcdefg') abc format()내 문자열 값의 앞 3글자 출력
'{:.4}'.format(12.3456) 12.35 format()내 숫자형 값을 유효숫자 4자리로 출력(자동 반올림)
'{:.2f}'.format(12.3456) 12.35 format()내 숫자형 값을 소수점 아래 2자리까지 출력(자동 반올림)

 

5) 타입

  • 어떤 형태로 보여줄지
타입 의미 비고
d 정수  
f 실수  
.2f 소수점 둘째 자리까지 실수 포맷 문자열만으로 정수부분제한 안됨
→출력할 최소 자리수로 인식 (ex{:5.2f}) : 출력할 자리수 최소5)
s 문자열  
x 16진수 소문자  
o 8진수  
b 2진수  
name = "홍길동"
age = 25

# 1) 순서대로
print("제 이름은 {}이고, 나이는 {}살입니다.".format(name, age))

# 2) 인덱스 지정
print("제 이름은 {0}이고, 나이는 {1}살입니다.".format(name, age))
print("{1}살인 {0}입니다.".format(name, age))  # 순서 바꾸기

# 3) 이름 지정
print("내 이름은 {a}이고, {b}살입니다".format(a=name,b=age))

 

3. f-string (python 3.6 이상)

name = "홍길동"
age = 25

# f 또는 F를 문자열 앞에 붙이기
print(f"제 이름은 {name}이고, 나이는 {age}살입니다.")
print(F"제 이름은 {name}이고, 나이는 {age}살입니다.")  # F도 가능

# 변수뿐 아니라 표현식도 가능!
print(f"내년에는 {age + 1}살이 됩니다.")
print(f"10년 후에는 {age + 10}살입니다.")

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기