본문 바로가기

Python 기초 배우기/비전공자도 배우는 파이썬 기초

05. 파이썬 포맷팅(format), 문자 치환하기 (%d,%s,{0})

작업을 하다 보면 특정 변수에

여러 가지 값을 넣어야 할 때가 있습니다.

예를 들면, 10명의 학생들의 학점을 발표할 때

이름이 다르기 때문에 출력을 하려면

문자열을 10번 써야 합니다.

이런 상황에서 유용한 것이

바로 포맷팅(Formatting)입니다.

 

 

 

문자열 포맷팅(Formatting)

문자 치환하기 / %d %s / { } .format
문자열 안에 어떤 값을 삽입하는 방법


 

포맷팅의 방법은 2가지입니다.

1. 포맷 코드 사용 (%d, %s 등)

2. 포맷 함수 사용 ( { } .format )

 

포맷 코드 사용
자료 형태에 따라서 사용하는 포맷코드가 다릅니다.

1. %s : 문자열 ◀ 많이 사용
2. %d : 정수 ◀ 많이 사용
3. %c : 문자 1개
4. %f : 부동 소수
6. %o : 8진수
7. %x : 16진수
6. %% : '%' 자체를 출력

 

"문자열 %s 문자열" %출력값

"문자열 %s %d %s " %(1번째, 2번째, 3번째)

 

문자열 작성 후 치환하고 싶은 값에

자료 형태에 맞게 %s 또는 %d 표시합니다.

그리고 문자열 다음에 % 출력값 작성합니다.

print("김파이의 점수는 %d 점 입니다." % 85) 
print("%s의 점수는 70 점 입니다." % "이포맷")


##### result #####

김파이의 점수는 85 점 입니다. 
이포맷의 점수는 70 점 입니다.


출력값을 변수로 넣을 수도 있습니다.

이렇게 하면 변숫값만 변경하면 되니까 편하겠지요~

그리고 한 개의 문자열에 여러 개의 값을

포맷팅 할 수 있습니다.

 

아래 예문처럼 2개 이상의 값을 넣으려면

출력값을 넣는 % 다음에 괄호( ) 안에 콤마(,)로

구분하여 각 각의 값을 입력합니다.

점수 = 95 
이름 = "이포맷" 

print("김파이의 점수는 %d 점 입니다." % 점수) 
print("%s의 점수는 70 점 입니다." % 이름) 
print("%s의 점수는 %d 점 입니다." % (이름,점수)) 
print("%s의 점수는 %d 점 입니다. %s" % (이름,점수,"합격!"))


##### result #####

김파이의 점수는 95 점 입니다. 
이포맷의 점수는 70 점 입니다. 
이포맷의 점수는 95 점 입니다. 
이포맷의 점수는 95 점 입니다. 합격!


포맷 코드는 자료 형태에 따라서

%s, %d, %f 등으로 써야 한다고 말씀드렸는데요.

Tip! 문자열에 사용되는 %s 는

어떤 자료 형태로도 치환이 가능합니다.

모든자료를 문자열로 바꿔서 출력하기 때문입니다.

(자료형태를 유지할 필요가 없다면 %s만 사용해도 됩니다.)

 

점수 = 95 
이름 = "이포맷" 
print("%s의 점수는 %s 점 입니다. %s" % (이름,점수,"합격!"))


##### result #####

이포맷의 점수는 95 점 입니다. 합격!


그리고 만약

"김파이는 반에서 상위 20%에 속합니다."

라는 퍼센트(%)가 포함된 문자열을 출력하려면 어떻게 할까요?

아래처럼 %% 코드를 사용하면 '%' 값만 그대로 한 번 더 출력됩니다.

 

퍼센트 = 20 
이름 = "김파이" 
print("%s는 반에서 상위 %s에 속합니다." %(이름, 퍼센트)) 
print("%s는 반에서 상위 %s%%에 속합니다." %(이름, 퍼센트))


##### result #####

김파이는 반에서 상위 20에 속합니다. 
김파이는 반에서 상위 20%에 속합니다.

 


포맷팅 하려는 값 앞에 숫자를 넣으면

숫자만큼 공백을 만들게 됩니다.

치환 값 왼쪽에 공백을 10칸 만큼 넣으려면

%10s

치환 값 오른쪽에 공백을 10칸 만큼 넣으려면

%-10s

소수점 3자리까지 표현하려면

%0.3f 로 작성하면 됩니다.

공백과 소수점을 같이 표현 할 수도 있습니다.

 

print("%10s 왼쪽에 공백10개" %"안녕!") 
print("%-10s 오른쪽에 공백10개" %"안녕!") 
print("%0.3f 소수점 포현" % 3.141592) #소수점 인식 
print("%0.3s 소수점 포현" % 3.141592) #문자열 인식 
print("%10.3f 소수점 포현" % 3.141592)


##### result #####

          안녕! 왼쪽에 공백10개
안녕!           오른쪽에 공백10개
3.142 소수점 포현 
3.1 소수점 포현 
         3.142 소수점 포현

 

 

 

 

 

format 함수 사용

{ } .format( )


 

{순서} 문자열 .format(출력값)

{순서1} {순서2} 문자열.format(출력값1,출력값2)

 

문자열 내에서 포맷팅 하려는 값을

{0} 부터 순서대로 입력합니다.

문자열 끝에 ' . format( ) ' 을 입력한 후

괄호 안에 순서대로 출력값을 넣습니다.

 

점수 = 95 
이름 = "이포맷" 
print("김파이의 점수는 {0} 점 입니다." .format(점수)) 
print("{0}의 점수는 70 점 입니다." .format("이포맷")) 
print("{0}의 점수는 {1} 점 입니다." .format(이름, 점수)) 
print("{0}의 점수는 {1} 점 입니다.{2}" .format(이름, 점수, "합격!"))


##### result #####

김파이의 점수는 95 점 입니다. 
이포맷의 점수는 70 점 입니다. 
이포맷의 점수는 95 점 입니다. 
이포맷의 점수는 95 점 입니다.합격!


순서가 너무 많아져서 헷갈린다면

format 함수 내에서 변수를 지정하여

값을 넣을 수도 있습니다.

헷갈릴 필요없이

가장 깔끔한 방법이라고 생각합니다~

 

점수=70 
print("{name}의 점수는 {score} 점 입니다." .format(name="철수",score=점수))


##### result #####

철수의 점수는 70 점 입니다.


format( ) 함수를 이용하여 포맷팅 할때

치환할 값의 전체 자리수 또는

정렬 방식등을 추가할 수 있습니다.

 

점수 = 95 
이름 = "이포맷" 

#{인덱스:전체자리수} 
print("김파이의 점수는 {0:10} 점 입니다." .format(점수)) #치환하는 값에 10칸 자리수가 생성 
print("김파이의 점수는 {0:5} 점 입니다." .format(점수)) #치환하는 값에 5칸 자리수가 생성 

#{인덱스:정렬방향 전체자리수} 
print("김파이의 점수는 {0:<5} 점 입니다." .format(점수)) #5칸 자리수 주고 왼쪽 정렬 
print("김파이의 점수는 {0:>5} 점 입니다." .format(점수)) #5칸 자리수 주고 오른쪽 정렬 

#{인덱스:공백에문자넣기 정렬방향 전체자리수} 
print("김파이의 점수는 {0:*>5} 점 입니다." .format(점수)) #5칸 자리수 주고 공백엔 *표시 오른쪽 정렬


##### result #####

김파이의 점수는           95 점 입니다. 
김파이의 점수는      95 점 입니다. 

김파이의 점수는 95      점 입니다. 
김파이의 점수는      95 점 입니다. 

김파이의 점수는   ***95 점 입니다.

포맷팅(format)은 파이썬 제어문에서

(if문, while문 등)많이 사용됩니다.

그래서 많은 예문을 연습해 두면 좋겠습니다.