Language/Python&Django

파이썬 문자열 포맷팅 (Python String Formatting)

지과쌤 2021. 2. 9.
반응형

1. %


문자열 포맷 코드

문자열 포맷 코드

 

#숫자 대입
>>> "I eat %d apples." % 3
'I eat 3 apples.'

#문자열 대입
>>> "I eat %s apples." % "five"
'I eat five apples.'

#정수형 변수 대입
>>> number = 3
>>> "I eat %d apples." % number
'I eat 3 apples.'

#2개 이상의 값 넣기
>>> number = 10
>>> day = "three"
>>> "I ate %d apples. so I was sick for %s days." % (number, day)
'I ate 10 apples. so I was sick for three days.'

 

+@

 

%s 포맷 코드는 어떤 형태의 값이든 변환하여 넣을 수 있다.

>>> "I have %s apples" % 3
'I have 3 apples'
>>> "rate is %s" % 3.234
'rate is 3.234'

3을 문자열 안에 삽입하려면 %d를 사용하고, 3.234를 삽입하려면 %f를 사용해야한다. 하지만 %s를 사용하면 이런 것을 생각하지 않아도 된다. 왜냐하면 %s는 자동으로 %뒤에 있는 값을 문자열로 바꾸기 때문이다.

 

+@

 

포맷팅 연산자 %와 %를 같이 쓸 때는 %%를 쓴다

"Error is %d%." % 98

#오류
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: incomplete format

#정상출력
>>> "Error is %d%%." % 98
'Error is 98%.'

문자열 안에 %d같은 포맷팅 연산자가 없다면 %는 홀로 쓰여도 상관없다.

 

포맷 코드와 숫자 혼용

 

정렬과 공백

>>> "%10s" % "HI"
'        HI'

>>> "%-10sJAIN." % 'HI'
'HI        JAIN.'

%10s는 전체 길이가 10개인 문자열 공간에서 대입되는 값을 오른쪽으로 정렬하고 그 앞의 나머지는 공백으로 남겨 두라는 의미.

 

%-10s는 왼쪽 정렬.

 

소수점 표현하기

>>> "%0.4f" % 3.33333333
'3.3333'

3.33333333을 소수점 네 번째 자리까지만 나타내고 싶은 경우.

" . "의 의미는 소수점 포인트를 말하고, 그 뒤의 숫자 4는 소수점 뒤에 나올 숫자의 개수를 말한다.

 

>>> "%10.4f" % 3.33333333
'    3.3333'

위는 숫자 3.33333333을 소수점 네 번째 자리까지만 표시하고 전체 길이가 10개인 문자열 공간에서 오른쪽으로 정렬하는 예를 보여준다.

 


2. "{ }".format()


format 함수를 사용한 포맷팅

#숫자 바로 대입
>>> "I eat {0} apples".format(3)
'I eat 3 apples'

#문자열 바로 대입하기
>>> "I eat {0} apples".format("five")
'I eat five apples'

#숫자 값을 가진 변수로 대입하기
>>> number = 3
>>> "I eat {0} apples".format(number)
'I eat 3 apples'

#2개 이상의 값 넣기
>>> number = 10
>>> day = "three"
>>> "I ate {0} apples. so I was sick for {1} days.".format(number, day)
'I ate 10 apples. so I was sick for three days.'​

2개 이상의 값을 넣을 경우, 중괄호{} 에 들어갈 순서를 지정할 수 있다.

#순서 지정하지 않는 경우 왼쪽부터
>>> '{} x {} = {}'.format(2, 3, 2*3)
'2 x 3 = 6'

#순서 지정하는 경우
>>> '{1} x {0} = {2}'.format(2, 3, 2*3)
'3 x 2 = 6'

 

이름으로 넣기

>>> "I ate {number} apples. so I was sick for {day} days.".format(number=10, day=3)
'I ate 10 apples. so I was sick for 3 days.'

이름으로 넣을 경우 format 함수에는 반드시 name=value와 같은 형태의 입력값이 있어야만 한다.

 

왼쪽정렬, 오른쪽정렬, 가운데정렬

#왼쪽정렬
>>> "{0:<10}".format("hi")
'hi        '

#오른쪽정렬
>>> "{0:>10}".format("hi")
'        hi'

#가운데정렬
>>> "{0:^10}".format("hi")
'    hi    '

 :<10  표현식을 사용하면 치환되는 문자열을 왼쪽으로 정렬하고 문자열의 총 자릿수를 10으로 맞출 수 있다.

오른쪽 정렬은  :<  대신  :> 을 사용한다.

:^ 기호를 사용하면 가운데 정렬도 가능하다.

 

공백 채우기

# =로 공백 채우기
>>> "{0:=^10}".format("hi")
'====hi===='

#!로 공백 채우기
>>> "{0:!<10}".format("hi")
'hi!!!!!!!!'

채워넣을 문자 값은 정렬 문자 <, >, ^ 바로 앞에 넣어야 한다.

 

소수점 표현하기

#소수점 표현
>>> y = 3.42134234
>>> "{0:0.4f}".format(y)
'3.4213'

#자릿수 10으로..
>>> "{0:10.4f}".format(y)
'    3.4213'

0.4f를 사용한것을 볼 수 있다. 아래 코드는 자릿수를 10으로 맞춘것이다.

 

{ 또는 } 문자 표현하기

>>> "{{ and }}".format()
'{ and }'

format함수를 사용해 문자열 포매팅을 할 경우 중괄호 문자를 문자 그대로 사용하고싶을 경우, 연속해서 사용하면 된다.

 


3. f문자열 포맷팅


파이썬 3.6버전부터 지원하는 기능

 

>>> name = '홍길동'
>>> age = 30
>>> f'나의 이름은 {name}입니다. 나이는 {age}입니다.'
'나의 이름은 홍길동입니다. 나이는 30입니다.'

f 문자열 포맷팅은 위와 같이 변수값을 생성한 후, 그 값을 참조할 수 있다.

 

#표현식을 지원한다.
>>> age = 30
>>> f'나는 내년이면 {age+1}살이 된다.'
'나는 내년이면 31살이 된다.'

>>> f"{2*37}"
'74'

#딕셔너리를 사용할 수 있다. KEY-VALUE 쌍을 갖는 자료형 사용 가능
>>> d = {'name':'홍길동', 'age':30}
>>> f'나의 이름은 {d["name"]}입니다. 나이는 {d["age"]}입니다.'
'나의 이름은 홍길동입니다. 나이는 30입니다.'

표현식과 딕셔너리도 사용할 수 있다.

 

#정렬
>>> f'{"hi":<10}'  # 왼쪽 정렬
'hi        '
>>> f'{"hi":>10}'  # 오른쪽 정렬
'        hi'
>>> f'{"hi":^10}'  # 가운데 정렬
'    hi    '

#공백 채우기
>>> f'{"hi":=^10}'  # 가운데 정렬하고 '=' 문자로 공백 채우기
'====hi===='
>>> f'{"hi":!<10}'  # 왼쪽 정렬하고 '!' 문자로 공백 채우기
'hi!!!!!!!!'

#소수점
>>> y = 3.42134234
>>> f'{y:0.4f}'  # 소수점 4자리까지만 표현
'3.4213'
>>> f'{y:10.4f}'  # 소수점 4자리까지 표현하고 총 자리수를 10으로 맞춤
'    3.4213'

# { } 문자 표시
>>> f'{{ and }}'
'{ and }'

정렬, 공백 채우기, 소수점 표현 등

 

#함수
>>> def to_lowercase(input):
...     return input.lower()

>>> name = "Eric Idle"
>>> f"{to_lowercase(name)} is funny."
'eric idle is funny.'


#메소드
>>> f"{name.lower()} is funny."
'eric idle is funny.'

함수 메소드 등의 타입도 가능하다.

 

반응형

댓글

💲 추천 글