파이썬 f-string 포매팅 완벽 정리 — 소수점·정렬·날짜까지
2026-05-08 · Python · 파이썬 · 기초 · 문자열
파이썬 f-string이란?
파이썬 f-string(formatted string literal)은 문자열 앞에 f를 붙이고 중괄호 {} 안에 변수나 표현식을 직접 넣어 문자열을 만드는 방식입니다. 파이썬 3.6부터 도입되었고, 기존의 % 포매팅이나 str.format()보다 짧고 빠르며 읽기 쉬워 현재 가장 널리 쓰이는 포매팅 방법입니다.
기본 문법
name = "민수"
age = 25
print(f"{name}님은 {age}살입니다.") # 민수님은 25살입니다.
중괄호 안에는 변수뿐 아니라 연산식이나 함수 호출도 넣을 수 있습니다.
a, b = 3, 4
print(f"합은 {a + b}이고 제곱은 {a ** 2}입니다.") # 합은 7이고 제곱은 9입니다.
print(f"대문자: {name.upper()}")
소수점 자리수 지정
콜론 뒤에 .2f처럼 쓰면 소수점 자리수를 지정합니다. f는 고정 소수점을 뜻합니다.
pi = 3.141592
print(f"{pi:.2f}") # 3.14
print(f"{pi:.4f}") # 3.1416
print(f"{0.25:.0%}") # 25% (퍼센트 표시)
천 단위 구분 기호
price = 1234567
print(f"{price:,}") # 1,234,567
print(f"{price:,.2f}") # 1,234,567.00
정렬과 채우기
<는 왼쪽, >는 오른쪽, ^는 가운데 정렬입니다. 숫자는 전체 너비를 뜻합니다.
print(f"[{'hi':<10}]") # [hi ]
print(f"[{'hi':>10}]") # [ hi]
print(f"[{'hi':^10}]") # [ hi ]
print(f"[{42:0>5}]") # [00042] (0으로 채우기)
날짜·시간 포매팅
from datetime import datetime
now = datetime(2026, 6, 21, 14, 30)
print(f"{now:%Y-%m-%d}") # 2026-06-21
print(f"{now:%Y년 %m월 %d일}") # 2026년 06월 21일
print(f"{now:%H:%M}") # 14:30
실전 예제
디버깅에 유용한 = 기호(파이썬 3.8+)는 변수 이름과 값을 함께 출력합니다.
x = 10
print(f"{x = }") # x = 10
print(f"{x * 2 = }") # x * 2 = 20
여러 줄 f-string과 정렬을 조합한 표 만들기 예제입니다.
items = [("사과", 1500), ("바나나", 3200)]
for name, price in items:
print(f"{name:<6}{price:>8,}원")
# 사과 1,500원
# 바나나 3,200원
자주 하는 실수
- f 빠뜨리기: 따옴표 앞에
f가 없으면 중괄호가 그대로 문자로 출력됩니다. - 따옴표 충돌: f-string 안에서 같은 종류의 따옴표를 쓰면 오류가 납니다. 바깥이 큰따옴표면 안쪽은 작은따옴표를 사용하세요(파이썬 3.12부터는 같은 따옴표도 허용).
- 중괄호 자체를 출력: 문자
{또는}를 출력하려면{{,}}처럼 두 번 씁니다. - 백슬래시: 파이썬 3.11 이하에서는 f-string 표현식 안에
\n같은 백슬래시를 직접 넣을 수 없습니다. 변수에 미리 담아두세요.
f-string vs 다른 포매팅 비교
| 방식 | 예시 | 특징 |
|---|---|---|
| f-string | f"{name}" | 짧고 빠름, 권장(3.6+) |
| str.format() | "{}".format(name) | 구버전 호환, 약간 장황 |
| % 포매팅 | "%s" % name | 오래된 방식, 비권장 |
자주 묻는 질문
Q. f-string과 format() 중 무엇을 써야 하나요?
파이썬 3.6 이상이라면 f-string을 권장합니다. 더 짧고 빠르며 읽기 쉽습니다. format()은 포맷 문자열을 변수로 따로 보관해야 하는 특수한 경우에만 유용합니다.
Q. 소수점을 반올림 없이 버리고 싶어요.
:.2f는 반올림합니다. 버림이 필요하면 math.trunc나 int()로 먼저 처리한 뒤 포매팅하세요. 예: f"{int(pi*100)/100}".
Q. 변수 이름이 길 때 정렬이 깨져요.
고정 너비(:<10 등)를 지정하면 정렬을 맞출 수 있습니다. 다만 값이 지정 너비보다 길면 그대로 넘치므로 데이터 최대 길이를 고려해 너비를 정하세요.