지난번, 문자열 포맷팅의 의미와 3가지 방식을 각각 알아보았습니다.
그러나 여기선, 파이썬 포맷팅에서 빠지면 서운한, 형식 지정자를 다루지 않았습니다.
형식지정자의 개념과, 포맷팅에서 사용할수 있는 수많은 형식 지정자를 이번포스팅에 배운만큼 정리해보았습니다.
형식지정자,
print("{0:ㅡ^+10,}".format(9999.9))
"""출력결과 :
ㅡ+9,999.9ㅡ
"""
문자열 내에 값을 포맷팅(삽입)할 때, 세부적으로 설정을 붙여줄 수 있다는 것, 아시나요?
이것을 형식지정자라 말하는데, 가벼운 포맷팅 문법과 다르게 매우 다양한 형식지정자가 존재합니다.
%을 사용한 예전 포맷팅 방법에는 %(타입)을 %형식지정자(타입),
{}를 사용하는 요즘 포맷팅 방법에는 {(값)}을 {(값): 형식지정자}로 형식지정자를 사용할 수 있습니다.
형식 지정자를 종류에 따라 묶어서 모두 쓰자면, 순서대로해서 아래와 같습니다.
[채움문자] [정렬방법] [부호표시법] [전체폭설정] [단위구분법] [소수점이하자릿수] [타입형식]
(여기서 원하는 설정만 형식을 지정해주고, 나머지는 생략하면 됩니다. 형식지정자가 여러개면, 위 순서대로 써주어야 됩니다.)
이들 설정값에 대해서 차근차근 알아봅시다!
정렬방법, 전체폭설정
#정렬됨에 따라 공백이 생기는지 확인하기 위해서 전체 폭을 10글자로 모두 설정해두었다.
print("정렬기본값 : [{0:10}]".format('ppap')) # 문자정렬
print("왼 쪽정렬 : [{0:<10}]".format('ppap'))
print("가운데정렬 : [{0:^10}]".format('ppap'))
print("오른쪽정렬 : [{0:>10}]".format('ppap'))
print("정렬기본값 : [{0:10}]".format(1234)) # 숫자정렬
print("왼 쪽정렬 : [{0:<10}]".format(1234))
print("가운데정렬 : [{0:^10}]".format(1234))
print("오른쪽정렬 : [{0:>10}]".format(1234))
""" 출력결과 :
정렬기본값 : [ppap ]
왼 쪽정렬 : [ppap ]
가운데정렬 : [ ppap ]
오른쪽정렬 : [ ppap]
정렬기본값 : [ 1234]
왼 쪽정렬 : [1234 ]
가운데정렬 : [ 1234 ]
오른쪽정렬 : [ 1234]
"""
정렬하는 방법에는 왼쪽(<), 가운데(^), 오른쪽(>) 정렬이 있습니다. (기본값: 문자는 왼쪽 정렬, 숫자는 오른쪽(>) 정렬)
물론 정렬방법만 설정했을때는 공백이 없을때는 변화를 알기 어렵습니다. 여기서는 추가로 전체 폭설정을(10) 추가해서 정렬에 따라서 공백이 어디에 생기는지 보이게 했습니다.
전체 폭설정(n)은 원하는 폭만큼의 숫자(n)를 넣어주면 원래 값의 크기가 뭐든간에 폭만큼(남는 크기는 공백으로) 값이 저장됩니다.
채움문자
print("채움문자(0) : [{0:0^10}]".format(2020))
print("채움문자(빔) : [{0:빔^10}]".format(2020))
print("채움문자(_) : [{0:_^10}]".format(2020))
print("채움문자(□) : [{0:□^10}]".format(2020))
""" 출력결과 :
채움문자(0) : [0002020000]
채움문자(빔) : [빔빔빔2020빔빔빔]
채움문자(_) : [___2020___]
채움문자(□) : [□□□2020□□□]
"""
채움문자(...)는 정렬방법과 함께 쓰이며, 원하는 문자나 숫자(...)를 추가한다면 정렬후의 공백을 채우는 문자를 설정해줄 수 있습니다. (원래 있는 문자열의 공백을 채우지는 않습니다.)
원래는 정렬방법이 있어야 되지만, 숫자는 정렬방법 명시 없이도 채움문자를 사용할 수 있습니다. (기본정렬값이 오른쪽 정렬이기에 남는 폭만큼의 왼쪽공백을 채움문자로 채웁니다.)
다만, 채움문자도 마찬가지로 전체폭설정이 없으면 정렬할때 공백이 생기지 않기에 채움문자만 혼자 쓰일수는 없습니다. (채움문자만 혼자 설정할려고 하면, 에러가 나거나, 숫자라면 전체폭설정값으로 처리합니다)
부호표시법
print("부호표시기본값: {0:}, {1:}".format(3, -3))
print("모든부호표시: {0:+}, {1:+}".format(3, -3))
print("-부호만표시: {0:-}, {1:-}".format(3, -3))
print("부호맨앞위치: {0:=+5}, {1:=5}".format(3, -3))
""" 출력결과 :
부호표시기본값: 3, -3
모든부호표시: +3, -3
-부호만표시: 3, -3
부호맨앞위치: + 3, - 3
"""
부호를 표시하는 방법에는 모든부호표시(+), 음수부호만표시(-)가 있습니다. (기본값: 음수부호만표시(-))
그리고 추가로 부호표시법 앞에 쓰이는 부호 맨앞 고정표시(=) 설정도 있습니다. (기본값: 부호 숫자앞표시)
이 설정은 앞에 공백이 없을때는 기본값과 비슷하지만, 앞(왼쪽)에 공백이 있을때, 공백을 포함해서 맨처음으로 부호가 붙습니다. 말그대로 부호가 항상 맨앞에 붙게 됩니다. (=는 공백과 관련있어서 공백을 만드는 전체폭설정, 정렬방법과 같이 사용됩니다.)
=는 +,-와도 함께 사용할 수 있지만, 둘의 순서에선 =가 먼저옵니다. (=+를 잘못해서 +=로 쓰면 +을 공백 채움문자로 인식)
당연하겠지만 숫자가아닌 문자열에 부호표시법을 쓸수 없습니다. (에러 납니다;;)
단위구분법
print("기본값: {0:}\n,붙임: {0:,}\n_붙임: {0:_}".format(-1980000))
""" 출력결과 :
기본값: -1980000
,붙임: -1,980,000
_붙임: -1_980_000
"""
단위구분법에는 천단위(000)마다 콤마 붙이기(,), 밑줄 붙이기(_)가 있습니다. (기본값 : 안붙임)
흔히 화폐 액수나 그외 자릿수가 많아지는 숫자들을 보기좋게 출력시킬수 있습니다.
(당연히 문자열에는 단위구분법을 쓸수 없습니다)
소수점이하자릿수
print("기본값(10자리수): {0:}".format(3.1415926535))
print("5자리수전까지: {0:.5}".format(3.1415926535))
print("1자리수전까지: {0:.1}".format(3.1415926535))
print("20자리수전까지: {0:.20}".format(3.1415926535))
""" 출력결과 :
기본값(10자리수): 3.1415926535
5자리수전까지: 3.1416
1자리수전까지: 3e+00
20자리수전까지: 3.1415926535000000541
"""
소수점이하자릿수(.n)는 (n은 자릿수), 설정하면 n자릿수~맨뒤까지를 절사(지움)합니다. (기본값: 절사없음, 원본)
당연히 자릿수에는 자연수만 들어갈 수 있습니다. (0도 들어가긴 하는데 1과 출력값이 같습니다)
자릿수에서 원래의 소수점 아래 자릿수보다 더 큰 값을 작성하면 원래값 뒤에 0이 나오고, 더 간다면 생뚱맞게 이상한 값이 나오는걸 볼 수 있는데... (소수점아래로 부터 16자리를 벗어났을 경우)
파이썬의 실수의 범위를 벗어나서 오차범위로 나오는 값으로, 왠만하면 범위까지만 사용합시다.
타입형식
print("기본값: {0:}\n2진수: {0:b}\n10진수: {0:d}\n16진수소문자: {0:x}\n16진수대문자: {0:X}".format(63))
""" 출력결과 :
기본값: 63
2진수: 111111
10진수: 63
16진수소문자: 3f
16진수대문자: 3F
"""
타입형식은 문자열이면 s, 정수면 b, d, o, x, X, n, 실수면 e, E, f, F, g, G, n 과 같이 다양한 값이 있습니다.
%방식에서 타입형식을 지정할때 기본적으로 사용하지만, {}방식에서도 사용할 수 있습니다.
유용한것은 이것으로 2진법(b), 10진법(d), 16진법의 소문자와 대문자(x, X)를 출력할 수 있습니다.
사실 이부분이 정리하면서 몇일간 공을 들인 부분이 아닐까 싶습니다. 예전에 공부할때도, 포맷팅에 대해선 쉽게 찾을수 있었지만, 포맷팅의 형식지정은 쉽게 정보를 구하지 못해서 아쉬웠는데, 이번에 그래도 부족하지만 조금이나마 모아 정리하니 뿌듯한것 같습니다.
(혹시 중간에 잘못된 정보나 오타가 있으면 댓글로 남겨주세요, 오보가 되지않게 여러번 실험코드로 체크하고도 고쳐지지 않은 부분이 설마 있을수 있습니다.)
다음 글로는 이제 문자열에 대해서 좀 알아봤으니, 다른 자료형인 리스트에 대해서 진행하도록 하겠습니다.
'파이썬(Python) > 문법' 카테고리의 다른 글
자료형 - 4-2. 리스트 함수 (0) | 2020.03.25 |
---|---|
자료형 - 4-1. 리스트자료형 (0) | 2020.03.25 |
자료형 - 3-4. 문자열 포맷팅 (0) | 2020.03.10 |
자료형 - 3-3. 문자열 함수 (0) | 2020.03.06 |
자료형 - 3-2. 인덱싱과 슬라이싱 (0) | 2020.02.22 |