[Python] 문자열 포매팅 Part 1

David Kim·2022년 10월 21일
0

Python

목록 보기
3/11
post-thumbnail

포메리안이랑 포매팅이랑 무슨 사이일까? 아무사이도 아니지만
문자열 포매팅을 정리해보겠다.

문자열 포매팅이란?

문자열에는 문자열 포매팅(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 형태가 나오는거니 이런 방식도 가능하다.

profile
people rarely succeed unless they have fun in what they are doing

0개의 댓글