본문 바로가기
Programming/Python

파이썬 format 메서드 다양한 포매팅을 돕는 메서드

by whitele 2021. 8. 22.
반응형

% 포맷팅보다 더 정교하고 완벽하게 표현하려면 format 메서드를 사용하면 됩니다. 문자열 객체의 기본 제공 메서드로 '문자열'.format(인수들) 또는 문자열 변수 s.format(인수) 형태로 사용이 가능합니다. 물론 아무 문자열이나 다 되는 것은 아니고 포맷이 지시된 문자열이어야 합니다. 변수로 사용하던 문자열 그 자체로 사용해도 똑같습니다.

 

format 메서드

가장 간단한 예입니다

print('{}+{}={}'.format(15,5,20))

당연하겠지만 문자열 '내용' 부분은 하나의 객체이고 format 메서드를 통해 포매팅하는 것입니다. {} 안에는 어떤 자료형도 상관없이 사용 가능합니다. 변수를 통해 사용하는 것도 가능합니다. 중괄호 자체를 출력하고 싶다면 {{ 혹은 }}로 두 번 연달아 중복하여 사용하면 됩니다.

 

타입 지시자

 어떠한 데이터 타입의 값을 인수로 넣었을 경우 다른 데이터 타입 형식으로 출력하고 싶을 때 쓰는 것이 타입 지시자입니다. 다음 목록들을 보며 몇 가지 예시를 들겠습니다.

  • b : 2진수 출력
  • c : ASCII 혹은 Unicode 출력
  • d : 10진수 출력
  • e : 부동 소수점 형식으로 출력
  • f, F : 고정 소수점 형식으로 출력
  • g, G : 부동 소수점, 고정 소수점 중 짧은 것으로 출력
  • n : 로컬 포맷 형식으로 출력
  • o : 8진수 출력
  • x, X : 16진수로 출력
  • % : 백분율 표기

 

2진수

 2진수를 출력하기 위해서는 'b' 타입 지시자를 사용해야 합니다. 

print('{:b} {:b}'.format(5,16))

b 타입지시자

 언뜻 보면 2진수인지 알아보기 힘들 수 있습니다. 때문에 8진수와 16진수에서도 0o나 0x를 통해 접두사를 붙이는데 2진수 역시도 가능합니다. 이런 0b나 0x 같이 접두사를 붙이는 경우네는 #을 선택하여 접두사를 사용할 수 있습니다. 예를 들어 다음과 같습니다.

print('{:#b}'.format(4))

b 타입지시자, 접두사

8진수와 16진수를 다루는 것도 동일합니다. b대신 o, x, X타입 지시자를 사용하면 됩니다.

 

g, G 타입 지시자

 g 타입 지시자는 e의 부동소수점 f의 고정소수점 형식 중 짧은 출력을 할 수 있는 타입 지시자를 자동으로 정합니다.

 

백분율 출력

 타입 지시자를 이용하여 백분율로 표기하여 포매팅하는 방법입니다. %를 이용하여 단순히 %를 출력하는 것이 아닌 실생활에서 사용하는 백분율로 환산하여 표현합니다. 예를 들어 0.2는 20% , 0.123은 12.3%와 같이 표현합니다. 길이와 자리 필드를 이용해 더 정교하게 혹은 간결하게 표현할 수 있습니다.

print('Win r:{:.2%}'.format(0.542))

% 지시자

 

format 필드

format을 더 정교하게 이용하기 위해서 존재하는 사양 , 상세 필드입니다. 처음에는 난해할지라도 계속해서 사용하고 응용하다 보면 이해하기 쉬운 부분입니다. 앞서 # 지시자와 타입 지시자를 설명했는데 이것과도 연관이 됩니다.

필드는 다음과 같습니다.


[[채우기] 정렬][부호][#][0][길이][,][. 자리][타입]


 각 항목들은 독립적이며 선택적으로 적용할 수 있습니다. 그러나 반드시 순서를 준수해야 합니다. 예를 들어. 5#X처럼 #이 자리 지시자보다 뒤에 있으면 안 됩니다.

 

길이 필드

 이곳은 출력하는 것을 포함하여 출력의 길이를 지정하는 필드입니다.

print('{:5}'.format(55)) #    55출력
print('{:10}'.fomat('hello')#hello     *출력

위 예시를 보면 알겠지만 숫자는 오른쪽 정렬을 하고 문자열은 왼쪽 정렬을 하는 것을 알 수 있습니다. 정렬 필드를 통해 조정할 수 있습니다.

 

채우기˙정렬 필드

[[채우기] 정렬] 필드를 보면 정렬 안에 채우기가 있습니다. 정렬 필드를 사용해야만 채우기 옵션을 사용할 수 있습니다. 정렬은 어려운 부분이 없습니다. 적어도 한번 이상쯤은 한글이나 워드를 통해 왼쪽 정렬 가운데 정렬을 이용했을 것입니다. 그와 똑같은 기능을 하는 곳이 정렬 필드입니다.  정렬은 단순히 빈 공간을 지정한 문자로 채우는 것입니다. 흔히 패딩이라 합니다.

print('{:*>20}'.format('hello python'))

채우기 정렬 이용

빈 공간은 *로 채워져 있고 오른쪽 정렬이 되어있다는 것을 볼 수 있습니다.

< 왼쪽 정렬
> 오른쪽 정렬
^ 가운데 정렬
= 채울 때 부호 사이에 채움

 

부호 필드

양수, 음수 부호의 출력 유무를 정하는 필드입니다.

+ 양수 기호를 붙인다.
- 음수 기호를 붙인다.
' ' 음수인 경우 그대로 -를 출력하고 양수인경우는 표시하지 않는다.(default)

 

print('{: } {:+} {:-}'.format(1, 1, 1))
print('{: } {:+} {:-}'.format(-1, -1, -1))

부호 필드

 

숫자 구분 ', ' 필드

 긴 숫자를 출력할 때 읽기 편하게 읽기 위해 사용할 수 있습니다. 천 단위로 세 자리마다 끊으며 일반적으로 표기하는 것과 같습니다. 예를 들어 1000을 1,000처럼 표기하는 것입니다.

print('{:,}'.format(134959014))

, 필드

 

소수점, 자리 필드

 소수점, 자리를 포매팅하기 위해 사용됩니다. 문자열에는 자르는 용도로 사용이 가능합니다. 전체 표현하는 길이를 제어하며 유효숫자를 표현하기에 적합합니다.

 

a=1.4125
b=6.7136
print('{:2}+{:.2}={:2}'.format(a,b,a+b))

자리 필드

위 같은 경우는 타입 지시자를 사용하지 않았습니다. 잘린 부분은 반올림되어 계산됩니다. 타입 지시자를 쓰지 않으면 총길이에 영향이 갑니다.

print('{.3f}+{:.3f}={:.3f}'.format(a,b,a+b))

소수점 필드

f타입 지시자를 명시하면 소수점 자리의 개수에만 영향이 갑니다.

 

 

정리

 format 메서드는 문자열 출력에 매우 정밀하고 다양한 기능을 통해 출력을 할 수 있게 돕습니다. 필드마다 선택을 하여 다양한 출력을 나타낼 수 있습니다. 출력에 신경 써서 해야 한다면 format을 적극적으로 사용하는 것이 좋습니다. 처음에는 난해해 보일 수도 있으나 사용하면 사용할수록 매우 쉬운 부분입니다.

728x90
반응형

댓글