포메리안이랑 포매팅이랑 무슨 사이일까? 아무사이도 아니지만
문자열 포매팅을 정리해보겠다.
문자열에는 문자열 포매팅(formatting)이라는 것이 있는데 이게 뭐냐면
문자열 안에 어떤 값을 삽입하는 방법이다. 이리 말하면 어려우니 예시를 보자
>>> "I had %d shots." %3 'I had 3 shots.'
예시에 보듯 정수 3을 대입하기 위해 %d 문자를 넣어주고 삽입할 숫자 3을
뒤에서 % 다음 넣었다. 그럼 3잔을 마셨다고 딱 하니 나온다 여기서
%d는 문자열 포맷 코드라고 부른다.
그렇다면 문자열(string)도 대입이 가능할까? 물논 당연히 가능하다.
>>> "I had %s shots." %"three" 'I had three shots.'
문자열 포매팅 같은 경우는 %s 로 표기가 된다. 숫자는 %d 문자는 %s
그 외에도 숫자로 대입해서 내는 방법 또한 가능하다.
>>> number = 3 >>> "I had %d shots." %number 'I had 3 shots.'
그렇다면 혹시 2개 이상의 값을 넣는건 가능할까? 무우우울론 요것도 쌉가능이다.
>>> number = 10 >>> day = "three" >>> "I had %d shots, so I had hangover for %s days." % (number, day) 'I had 10 shots, so I had hangover for three days '
위처럼 2개 이상의 값을 넣으려면 마지막 % 다음 괄호에 콤마(,)로 구분하여
각각의 값을 넣어 주면 된다.
문자열 포맷 코드는 다양하게 존재한다 그중 자주 쓰이는건
코드 | 설명 |
---|---|
%s | 문자열(string) |
%c | 문자 1개(character) |
%d | 정수(integer) |
%f | 부동 소수(floating-point) |
%% | Literal % (문자 % 퍼센티지 그 자체) |
머 이렇게 되겠다. 근데 사실 %s 문자열 포맷코드가 사기다... 그 이유는
어떤 형태의 값이든 다 변환되서 나온다 숫자든 문자들 이렇게
>>> "I had %s shots." %3 'I had 3 shots.' >>>"The ratio of Pi is %s" %3.141592 'The ratio of Pi is 3.141592'
아 그렇다면 %(퍼센티지) 퍼센티지 수치를 나타내려면 어떻게 해야할까?
예를 들어 내가 수학 시험을 98퍼 맞았다고 해보자 영어로는
'I got 98% on my math test' 또 야너두 시간 같은데 무튼 ㅋㅋㅋ
그럼 문자열에 %d%를 하고 뒤에 %98 하면 되려나 놉 절대 안된다.
아까 위에 표에 나왔듯이 %를 쓰고 싶으면 %% 이렇게 표기하면 된다.
백문이불어일견이라 직접 코드를 짜자면
>>> "I got %d%% on my math test." % 98 'I got 98% on my math test."
요로코롬 해야지 우리가 원하는 그림이 아니아니 코드가 나온다.
위에서 처럼 %d와 %s로 포맷 코드로 문자열 안에 어떤 값을 삽입하기 위해
사용 했는데 이번에는 좀더 재미난 건 좀 해보자 뭐 재밌다는 보장은 없지만
>>> "%10s" % 'hi' ' hi'
이 코드를 해석을 하자면 %10s는 전체 길이가 10개인 문자열에 공간에
대입되는 값을 오른쪽으로 정렬 하고 나머진 공백으로 남긴다 이뜻이다.
그럼 반대로 왼쪽 정렬을 하려면 %-10s로 하면 된다.
>>> "%-10sDavid" % 'hi' 'hi David'
위와 같이 %-10s에서 %hi 만 댑 했기에 David은 문자열 공백에 포함이
안된다 고로 전체 길이 10개의 포함은 딱 hi까지만 포함이 되고 David은
별개이니 헷갈리지 않도록 주의하자
오케오케 그럼 소수점 표현을 하려면 또 어떻게 해야할까?
>>> "%0.4f" % 3.141592 '3.1415'
3.141592에서 소수점 네 번째 자리만 나태내고 싶을 경우는 위와 같이
사용하면된다. 즉 여서 '.'의 뜻은 소수점 포인트를 말하고 그 뒤의
숫자 4는 소수점 뒤에 나오는 숫자의 개수를 말한다.
>>> "%10.4f" % 3.141592 ' 3.1415'
이럴 경우 소수점 넷째 자리까지 표기하고 앞에 열 공간에서 오른쪽으로 정령
참고로 앞에 빈공간 갯수는 4개다. 3.1415가 . 포함 6칸을 차지하기에
그럼 이번에는 format 함수를 이용한 포매팅을 해보자 format 함수를 쓰면
좀더 발전된 스타일로 문자열 포맷을 지정할 수 있다.
>>> "I had {0} shots".format(3) 'I had 3 shots.'
이렇게 하면 {0}이 숫자 3으로 바뀐다 그럼 문자열은? 물론 당근빠따 가능
>>> "I had {0} shots".format("three") 'I had three shots.'
더 응용을 해볼까 그럼?
>>> number = 3 >>> "I had {0} shots".format(number) 'I had 3 shots.'
좀 더 응용 해서 2개 이상 값 ㄲ?
>>> number = 10 >>> day = "three" >>> "I had {0} shots, so I had hangover for {1} days.".format(number, day) 'I had 10 shots, so I had hangover for three days '
가넝가넝 쌉가넝 이렇게 2개 이상의 값을 넣을 경우 문자열의 {0}, {1}과
같은 인덱스 항목이 format함수의 입력값으로 순서에 맞게 바뀐다. 즉슨
{0}은 number, {1}는 day로
>>> "I had {number} shots, so I had hangover for {day} days.".format(number=10, day=3) 'I had 10 shots, so I had hangover for 3 days '
이런식으로 이름으로 대입하여 넣는 방법도 있다 { }안에 name을 넣고 그리고
value를 넣어서 그 숫자값을 포함하면 위의 입력처럼 나온다.
그 외에도 다른 방법으로 혼합해서 나타내기도 가능하다.
>>> "I had {0} shots, so I had hangover for {day} days.".format(10, day=3) 'I had 10 shots, so I had hangover for 3 days '
결국 원리는 name=value 형태가 나오는거니 이런 방식도 가능하다.