소개
Python 문자열 포매팅 (String Formatting) 실습에 오신 것을 환영합니다. 문자열을 올바르게 포매팅하는 것은 간단한 출력문부터 복잡한 보고서 및 웹 페이지 생성에 이르기까지 모든 작업에 사용되는 모든 프로그래밍 언어에서 기본적인 작업입니다. Python 은 문자열 포매팅을 위한 여러 가지 방법을 제공하며, 각 방법은 고유한 장점과 사용 사례를 가지고 있습니다.
본 실습에서는 Python 문자열 포매팅의 발전을 탐구합니다. 전통적인 % 연산자부터 시작하여 보다 유연한 str.format() 메서드로 이동할 것입니다. 또한 Python 3.6 에서 도입된 현대적이고 권장되는 방식인 f-Strings 를 숙달하고 숫자를 효과적으로 포매팅하는 방법을 배웁니다. 마지막으로, 신뢰할 수 없는 소스의 템플릿을 처리하기 위한 안전한 옵션인 Template 문자열을 발견하게 됩니다.
실습을 마칠 때쯤이면 Python 프로젝트에서 적절한 문자열 포매팅 기술을 선택하고 사용하는 방법에 대해 포괄적으로 이해하게 될 것입니다.
% 연산자 사용하기
이 단계에서는 % 연산자를 사용하는 구식 문자열 포매팅에 대해 배웁니다. C 언어의 printf 함수에서 상속받은 이 방법은 문자열에 값을 삽입하기 위해 %s (문자열용) 및 %d (정수용) 와 같은 포맷 지정자 (format specifier) 를 사용합니다.
이 방법은 작동하지만 몇 가지 특이점이 있으며 최신 대안보다 유연성이 떨어집니다. 새로운 코드에는 f-Strings 또는 str.format()을 사용하는 것이 강력히 권장됩니다.
참고: WebIDE(VS Code 와 유사) 사용에 익숙하지 않다면, 이 랩에서 먼저 학습하십시오.
먼저, 왼쪽 파일 탐색기에서 step1.py 파일을 엽니다.
이제 step1.py에 다음 코드를 추가하여 문자열과 정수를 포매팅하는 방법을 확인해 봅시다.
## % 연산자: 구식 문자열 포매팅 (새로운 코드에는 권장되지 않음)
name = 'Pete'
print('Hello %s' % name) ## %s = 문자열 자리 표시자
num = 5
print('I have %d apples' % num) ## %d = 정수 자리 표시자
파일을 저장하고 터미널에서 실행하여 출력을 확인합니다.
python3 step1.py
%s는 name의 값으로, %d는 num의 값으로 대체된 다음 출력을 보게 될 것입니다.
Hello Pete
I have 5 apples
str.format 사용하기
이 단계에서는 Python 3 에서 도입된 (그리고 2.7 로 역이식된) 보다 강력하고 유연한 문자열 포매팅 방식인 str.format() 메서드를 탐구합니다. 이 메서드는 중괄호 {}를 플레이스홀더 (placeholder) 로 사용합니다.
format()에 인수를 전달하면 해당 인수가 순서대로 플레이스홀더에 삽입됩니다. 또한 중괄호 안에 숫자를 사용하여 위치 (position) 로 인수를 참조할 수도 있습니다.
파일 탐색기에서 step2.py 파일을 엽니다.
step2.py에 다음 코드를 추가합니다. 첫 번째 예제는 빈 중괄호를 사용하고, 두 번째 예제는 위치 인수를 사용합니다.
## str.format() method: modern string formatting (Python 2.7+)
name = 'John'
age = 20
## 인수가 순서대로 삽입됨
print("Hello I'm {}, my age is {}".format(name, age))
## 인수가 위치에 따라 삽입됨
print("Hello I'm {0}, my age is {1}".format(name, age))
파일을 저장하고 터미널에서 실행합니다.
python3 step2.py
두 print 문 모두 동일한 결과를 생성하며, str.format()을 사용하는 두 가지 방법을 보여줍니다.
Hello I'm John, my age is 20
Hello I'm John, my age is 20
포맷팅된 문자열 리터럴 또는 f-Strings
이 단계에서는 Python 3.6 이상에서 문자열을 포매팅하는 권장 방식인 f-Strings 를 마스터하게 됩니다. f-String 은 문자열 리터럴 앞에 f 또는 F를 붙인 형태입니다. 이 문자열을 사용하면 중괄호 {}로 묶어 파이썬 표현식 (expression) 을 문자열 안에 직접 포함할 수 있습니다.
f-Strings 는 런타임에 평가되므로 간결하고 읽기 쉬울 뿐만 아니라 매우 강력합니다.
파일 탐색기에서 step3.py 파일을 엽니다.
기본 구문 및 표현식
먼저 기본 구문과 표현식을 포함하는 방법을 살펴보겠습니다. step3.py에 다음 코드를 추가합니다.
## f-string: recommended way to format strings (Python 3.6+)
name = 'Elizabeth'
print(f'Hello {name}!') ## f 접두사는 {} 안의 표현식을 허용함
## f-strings 는 표현식을 지원합니다: {} 안에 계산을 포함할 수 있음
a = 5
b = 10
print(f'Five plus ten is {a + b} and not {2 * (a + b)}.')
여러 줄 f-Strings
또한 f-String 을 괄호로 묶어 여러 줄 문자열을 생성할 수도 있습니다. 이 예제를 step3.py에 추가합니다.
name = 'Robert'
messages = 12
multiline_string = (
f'Hi, {name}. '
f'You have {messages} unread messages'
)
print(multiline_string)
디버깅을 위한 = 지정자
Python 3.8 부터는 = 지정자를 사용하여 표현식과 그 값을 자동으로 출력할 수 있으며, 이는 디버깅에 매우 유용합니다. 이 마지막 코드를 step3.py에 추가합니다.
## = specifier: prints both variable name and value (Python 3.8+)
from datetime import datetime
now = datetime.now().strftime("%b/%d/%Y - %H:%M:%S")
print(f'date and time: {now=}')
이제 파일을 저장하고 터미널에서 실행합니다.
python3 step3.py
세 가지 예제 모두의 출력을 보게 될 것입니다. 출력되는 날짜와 시간은 다를 수 있습니다.
Hello Elizabeth!
Five plus ten is 15 and not 30.
Hi, Robert. You have 12 unread messages
date and time: now='...'
숫자 포맷팅
이 단계에서는 f-Strings 내에서 숫자 데이터를 포매팅하는 방법을 배웁니다. 이는 데이터를 사람이 읽기 쉬운 형식으로 표시하는 강력한 기능입니다. 여기서는 천 단위 구분 기호 추가, 부동 소수점 숫자 반올림, 숫자를 백분율로 표시하는 방법을 다룰 것입니다.
파일 탐색기에서 step4.py 파일을 엽니다.
다양한 숫자 포매팅 기술을 연습하기 위해 step4.py에 다음 코드를 추가합니다.
## Adding thousands separator
a = 10000000
print(f"Number with separators: {a:,}")
## Rounding a float to 2 decimal places
b = 3.1415926
print(f"Rounded number: {b:.2f}")
## Showing a number as a percentage with 2 decimal places
c = 0.816562
print(f"As a percentage: {c:.2%}")
각 포맷 지정자 (format specifier) 는 중괄호 {} 안의 콜론 : 뒤에 옵니다.
:,는 천 단위 구분 기호로 쉼표 (comma) 를 추가합니다.:.2f는 숫자를 소수점 이하 두 자리의 부동 소수점 (float) 으로 포맷합니다.:.2%는 숫자에 100 을 곱하여 소수점 이하 두 자리의 백분율로 표시합니다.
파일을 저장하고 터미널에서 실행합니다.
python3 step4.py
출력은 다음과 같아야 합니다.
Number with separators: 10,000,000
Rounded number: 3.14
As a percentage: 81.66%
참고를 위해, f-Strings 에서 사용할 수 있는 추가 숫자 포매팅 옵션이 있는 표는 다음과 같습니다.
| 숫자 | 포맷 | 출력 | 설명 |
|---|---|---|---|
| 3.1415926 | {:.2f} |
3.14 | 소수점 이하 두 자리로 부동 소수점 포맷 |
| 1000000 | {:,} |
1,000,000 | 쉼표 구분 기호를 사용한 숫자 포맷 |
| 0.35 | {:.2%} |
35.00% | 백분율 포맷 |
| 1000000000 | {:.2e} |
1.00e+09 | 지수 표기법 |
Template 문자열 사용
이 단계에서는 Python 의 내장 모듈인 string에서 제공하는 Template 문자열에 대해 배웁니다. f-Strings 보다 기능은 덜 강력하지만, 사용자로부터 생성될 수 있는 문자열 템플릿을 다룰 때 더 안전한 선택입니다. 복잡성이 낮아 임의의 코드가 실행되는 것을 방지하는데, 이는 str.format()과 같은 메서드를 주의 깊게 사용하지 않을 경우 보안 위험이 될 수 있습니다.
Template 문자열은 달러 기호 $를 사용하여 플레이스홀더 (placeholder) 를 표시합니다 (예: $name).
파일 탐색기에서 step5.py 파일을 엽니다.
step5.py에 다음 코드를 추가합니다. Template 클래스를 가져오고 (import), 템플릿 객체를 생성한 다음, substitute() 메서드를 사용하여 값을 삽입해야 합니다.
from string import Template
name = 'Elizabeth'
## Template 객체 생성
t = Template('Hey $name!')
## substitute() 메서드를 사용하여 플레이스홀더를 대체
result = t.substitute(name=name)
print(result)
substitute() 메서드는 템플릿의 플레이스홀더 이름과 일치하는 키 (key) 를 가진 키워드 인자 (keyword arguments) 를 받습니다.
파일을 저장하고 터미널에서 실행합니다.
python3 step5.py
출력에는 대체된 문자열이 표시됩니다.
Hey Elizabeth!
요약
Python 문자열 포매팅 (String Formatting) 실습을 완료하신 것을 축하드립니다!
본 실습에서 여러분은 Python 에서 문자열을 포매팅하는 주요 방법들을 살펴보았습니다. 다음 내용들을 학습했습니다.
%연산자: 더 이상 새로운 코드에 권장되지 않는 구식 C 스타일 포매팅 방식입니다.str.format()메서드:{}플레이스홀더를 사용하는 더 강력하고 유연한 방법입니다.- f-Strings: Python 3.6 이상에서 권장되는 현대적이고 간결한 접근 방식으로, 표현식 (expressions) 을 문자열 내에 직접 포함할 수 있습니다.
- 숫자 포매팅: f-Strings 내에서 포맷 지정자 (format specifiers) 를 사용하여 구분 기호, 정밀도, 백분율 등을 포함하여 숫자의 표시 방식을 제어하는 방법입니다.
Template문자열: 문자열 치환을 위한 더 간단하고 안전한 메커니즘으로, 외부 또는 신뢰할 수 없는 소스에서 가져온 템플릿을 처리하는 데 이상적입니다.
각 방법의 장단점을 이해함으로써, 이제 Python 프로그래밍 여정에서 마주치는 모든 문자열 포매팅 작업에 가장 적합한 도구를 선택할 수 있습니다.



