문자열 포매팅이란 문자열 안에 특정 값을 삽입하는 기법이다.
예를 들어 매일 그날의 요일을 출력하는 프로그램이 있다고 가정해보자.
"It is Monday"
"It is Tuesday"
위 문자열을 보면 문자열 내부에 요일을 나타내는 'Mon'과 'Tues' 부분이 매일 바뀌어야 한다.
문자열 포맷 코드로 포매팅(%d, %f, %s)
포매팅을 하는 첫 번째 방법은 문자열 포맷 코드를 사용하는 것이다.
예시를 보자.
>>> a = "It is %sday." % "Mon" # 문자열 바로 대입.
>>> print(a)
It is Monday.
>>> today = 'Tues'
>>> a = "It is %sday." % today # 변수로 대입
>>> print(a)
It is Tuesday.
포맷 코드를 사용하면 값을 바로 대입할 수도 있고 변수를 사용할 수도 있다.
포맷 코드는 %와 문자를 조합하여 만든다. 출력할 위치에 포맷 코드를 넣고, 문자열 끝에 % 기호와 변수를 입력한다.
대입하고자 하는 자료가 문자열이면 %s를 사용한다. 정수는 %d, 실수는 %f을 넣으면 된다.
사실 어차피 문자열로 들어가는 거라 %s를 쓰면 어느 타입의 자료형이건 커버가 된다.
여러 개의 변수 넣기
>>> age = 20
>>> height = 178.8
>>> a = '나는 %d살, 키는 %fcm이다.' % (age, height) # 2개 이상의 값을 넣으려면 꼭 괄호를 넣자.
>>> print(a)
나는 20살, 키는 178.800000cm이다.
>>> a = '나는 %d살, 키는 %0.1fcm이다.' % (age, height) # 소수점 첫 째 자리까지 출력.
>>> print(a)
나는 20살, 키는 178.8cm이다.
포맷 코드로 여러 개를 동시에 포맷팅 할 수 있는데 이 경우 괄호와 콤마를 사용해야 한다.
또한 float의 포맷 코드를 사용할 때 소수점 자리를 지정할 수 있다.
위 코드에서는 %0.1f로 소수점 첫 째 자리까지 출력했고 %0.4f의 경우 넷째 자리까지 출력을 하게 된다.
그리고 문자열 내부에 %가 있을 경우에는 포맷 코드를 그냥 사용하면 에러가 발생한다.
이스케이프 코드에서 백슬래쉬를 문자열에 넣기 위해 두 번 연속으로 쓴 것처럼 %를 연속으로 두 번 쓴다.
>>> a = "다운로드가 %d%% 완료되었습니다." % -98 # % 연속으로 두 번 사용
>>> print(a)
다운로드가 -98% 완료되었습니다.
좌우로 정렬하기
>>> "%10s" % "GO!" # 문자열을 오른 쪽으로 정렬, 앞은 공백
' GO!'
>>> "%-20sBACK!" % "GO!" # 문자열을 왼 쪽으로 정렬, 뒤는 공백 후 다음 문자
'GO! BACK!'
포맷 코드를 숫자와 조합하여 사용하면 더욱 유용하게 사용할 수 있다. 포맷 코드로 문자열을 좌우로 정렬할 수 있다.
첫 번째 예시를 보자. "%10s" % "GO!"는 전체 10칸 중 오른쪽의 3칸은 GO!, 왼쪽 7칸은 공백으로 채워진다.
두 번째 코드 "%-20sBACK!" % "GO!"는 전체 20칸 중 왼쪽 3칸에 GO!를 입력 후 나머지 오른쪽 17칸을 공백으로 채운다. 그 뒤부터 다음 문자열 BACK!이 입력된다.
위에 언급되지 않은 문자열의 포맷 코드는 아래 이미지를 첨부한다.(%s, %d, %s 이외에는 잘 안 쓰는 것 같다.)
format 함수로 포매팅 하기( '{0}'.format() )
사실 위에서 배운 포맷 코드는 많이 쓰이는 방식이 아니다.
C언어 스타일의 포맷 방식인데, C언어 유저가 파이썬을 만들어서 저런 포맷 코드 방식을 넣어뒀나 하는 생각이 든다.
format 함수를 사용하면 포맷 코드를 사용하는 것보다 더욱 편리하게 포매팅을 할 수 있고 표현 방식도 더 다양해진다.
format 함수로 포매팅하는 방법
그럼 아래 코드를 통해 format 함수를 사용법을 익혀보자.
>>> "It is {}day".format("Mon") # 문자열 바로 대입
'It is Monday'
>>> '나는 {}살, 키는 {:0.1f}cm이다.'.format(20, 178.8) # 두 개 값 넣기, 소수점 표현
'나는 20살, 키는 178.8cm이다.'
format 함수는 문자열 뒤에 .format() 형식으로 사용한다. 중괄호({}) 항목에 입력 값으로 들어간다.
두 번째 코드에서 보는 것과 같이 {:0.1f}는 첫 째 자리까지 소수점을 표시한다는 의미이다.
포맷 코드와 마찬가지로 여러 개의 값을 포매팅할 수 있다.
순서 지정하기
>>> dog, cat = 2, 3
>>> "I have {1} dogs and {0} cats".format(cat, dog) # 숫자로 순서 지정
'I have 2 dogs and 3 cats'
위 예에서 보듯이 {} 안에 숫자를 넣으면 순서를 지정할 수 있다.
이름으로 포매팅하기
>>> "I have {dog} dogs and {cat} cats".format(dog=2, cat=3)
'I have 2 dogs and 3 cats'
>>> '나는 {0}살, 키는 {age}cm이다.'.format(20, age=178.8) # 혼합
'나는 20살, 키는 178.8cm이다.'
format 함수에서는 name=value 형태로 포매팅이 가능하다. 인덱스 항목이 아닌 {name}을 입력한 후 문자열 뒤 format() 안에 값을 넣어주는 방식이다. 이 경우 반드시 name=value 형태로 입력을 해줘야 한다.
두 번째 예시처럼 인덱스 항목과 name=value 형태를 혼합하여 사용하는 것도 가능하다.
문자열 정렬 및 공백(문자) 넣기
format 함수에서도 포맷 코드에서처럼 문자열을 정렬할 수 있고, 기능도 더 많다
>>> "{0:<10}".format('GO!') # 왼쪽 정렬
'GO! '
>>> "{0:>10}".format('GO!') # 오른쪽 정렬
' GO!'
>>> "{0:^10}".format('GO!') # 가운데 정렬
' GO! '
포맷 코드에서와 달리 format 함수에서는 가운데 정렬도 된다. {0:<10}에서 정렬 문자 :<가 가리키는 방향이 왼쪽이면 왼쪽 정렬, :>가 오른쪽이면 오른쪽 정렬, :^이면 가운데 정렬이다.
포맷 코드에서와 마찬가지로 정렬 후 나머지 공간은 모두 공백 처리되는데 공백을 특정 문자로 대체할 수도 있다..
>>> "{0:->10}".format('GO!')
'-------GO!'
>>> "{0:+<10}".format('GO!')
'GO!+++++++'
꺾새 표시(<>) 앞에 원하는 특정 문자를 넣으니 빈 공간이 모두 문자로 치환되는 것을 알 수 있다.
{, }중괄호(brace) 출력하기
>>> 'Brace printing {{ and }}'.format() # 중괄호 연속 입력
'Brace printing { and }'
포맷 코드에서 %기호를 출력하기 위해 연속으로 입력했던 것과 마찬가지로 format 함수에서도 중괄호를 출력하기 위해서 연속으로 중괄호를 입력해야 한다.
f 문자열 포매팅( f'String' )
f 포매팅 방식은 매우 직관적이고 편리하다.
하지만 파이썬 3.6버전부터 사용 가능하기 때문에, 3.6 미만 버전의 파이썬에서는 주의가 필요하다.
f 포매팅 방식은 문자열 앞에 f만 붙여주면 된다.
f포매팅 사용 방법
>>> age = 20
>>> height = 178.8
>>> f'나는 {age}살, 키는 {height}cm이다.'
'나는 20살, 키는 178.8cm이다.'
위 코드에서 볼 수 있듯이, 문자열 앞에 f를 붙여주면 간단하게 f포매팅 기능을 사용할 수 있다.
f 포매팅은 변수를 생성한 후 문자열에서 참조할 수 있고, 문자열 내에서 수식도 사용할 수 있다.
>>> f'나는 {age*2}살, 키는 {height-10}cm이다.'
'나는 40살, 키는 168.8cm이다.'
f 포매팅 역시 정렬과 공백 채우기 기능이 있으며, 중괄호 넣는 방법도 비슷하니 아래 코드를 보며 익혀보자.
>>> f'{"GO!":>10}' # 오른쪽 정렬
' GO!'
>>> f'{"GO!":<10}' # 왼쪽 정렬
'GO! '
>>> f'{"GO!":^10}' # 가운데 정렬
' GO! '
>>> f'{"GO!":*<10}' # 왼쪽 정렬 후 문자로 채우기
'GO!*******'
>>> f'{"GO!":&>10}' # 오른쪽 정렬 후 문자로 채우기
'&&&&&&&GO!'
>>> f'Brace printing {{ and }}' # 중괄호 연속으로 입력
'Brace printing { and }'
2022.09.24 - [파이썬/기초 문법] - [파이썬]문자열(Strging)의 인덱싱(Indexing)과 슬라이싱(Slicing)
'파이썬 > 기초 문법' 카테고리의 다른 글
[파이썬]문자열 함수들 - 대문자, 소문자, 공백제거, 바꾸기 (0) | 2022.09.26 |
---|---|
[파이썬]문자열 함수 - 값 찾기, 개수 세기, 합치기, 나누기 (1) | 2022.09.26 |
[파이썬]문자열 자료형 - 인덱싱과 슬라이싱 (4) | 2022.09.24 |
[파이썬]문자열 만들기 및 이스케이프 코드 정리 (1) | 2022.09.23 |
[파이썬]숫자 자료형 정리 - int, float, 사칙연산 (0) | 2022.09.22 |
댓글