2. 문자열 서식 지정자와 포매팅 사용하기
- 파이썬은 다양한 방법으로 문자열을 만들 수 있는데, 서식 지정자(format specifier)로 문자열을 만드는 방법과 format 메서드로 문자열을 만드는 문자열 포매팅(string formatting) 등이 있다.
- 예를 들어 학생의 이름과 평균 점수를 출력할 때, 학생이 바뀌면 이름과 점수도 바뀔것이다.
제임스의 평균 점수는 85.3점입니다.
마리아의 평균 점수는 98.7점입니다.
- 위의 두 문자열에서 '의 평균 점수는', '점입니다.' 는 같지만 이름과 점수가 다른데, 이렇게 문자열 안에서 특정 부분을 원하는 값으로 바꿀 때 서식 지정자 또는 문자열 포매팅을 사용한다.
2-1. 서식 지정자(format specifier)로 문자열 넣기
- 서식 지정자는 % 로 시작하고 자료형을 뜻하는 문자가 붙는다.
- %s 는 문자열이라는 뜻이며 string의 s이다.
- 문자열 안에 %s 를 넣고 그 뒤에 % 를 붙인 뒤 'james' 를 지정해주면 %s 부분이 'james' 로 바뀐다.('I am %s.' 와 'james' 사이의 % 는 따옴표로 묶지 않고 그대로 입력한다.)
# '%s' % '문자열' >>> 'I am %s.' % 'james' 'I am james.'
- 문자열을 바로 지정하지 않고 변수를 지정하는 것도 가능하다.
>>> name = 'maria' >>> 'I am %s.' % name 'I am maria.'
2-2. 서식 지정자로 숫자 넣기
- 숫자는 %d 를 넣고 % 뒤에 숫자를 지정하면 된다.(%d 는 10진 정수 decimal integer의 d)
# '%d' % 숫자 >>> 'I am %d years old.' % 20 'I am 20 years old.'
2-3. 서식 지정자로 소수점 표현하기
- 실수를 넣을 때는 %f 를(고정 소수점 fixed point의 f) 사용하여 뒤에 숫자를 지정하는데, %f 는 소수점 이하 6자리까지 표시한다.
- 소수점 이하 자릿수를 지정하고 싶다면 f 앞에 .(점)과 자릿수를 지정해주면 된다.
# '%f' % 숫자 >>> '%f' % 2.3 '2.300000' # '%.자릿수f' % 숫자 >>> '%.2f' % 2.3 # 소수점 이하 두 자리까지 출력 '2.30' >>> '%.3f' % 2.3 # 소수점 이하 세 자리까지 출력 '2.300'
2-4. 서식 지정자로 문자열 정렬하기
- 서식 지정자와 숫자를 조합하면 문자열을 정렬할 수 있다.
- % 뒤에 숫자를 붙이면 문자열을 지정된 길이로 만든 뒤, 오른쪽으로 정렬하고 남는 공간을 공백으로 채운다.
# %길이s >>> '%10s' % 'python' # 10자리로 지정하여 오른쪽 정렬 ' python'
- 문자열 오른쪽 정렬은 자릿수가 다른 숫자를 출력할 때 유용한데, %d 와 %f 도 숫자와 조합하여 오른쪽으로 정렬할 수 있다.
# %길이d >>> '%10d' % 150 # 10자리로 지정하여 오른쪽 정렬 ' 150' >>> '%10d' % 15000 ' 15000'
- 실수는 .(점) 앞에 정렬할 길이를 지정하고, 점 뒤에 소수점 이하 자릿수를 지정하면 된다.
# %길이.자릿수f >>> '%10.2f' % 2.3 # 10자리로 지정하여 소수점 두 번째 자리까지, 오른쪽 정렬 ' 2.30' >>> '%10.2f' % 2000.3 ' 2000.30'
- 왼쪽 정렬은 문자열 길이에 - 를 붙여주면 된다.
# %-길이s >>> '%-10s' % 'python' # 10자리로 지정하여 왼쪽 정렬 'python '
2-5. 서식 지정자로 문자열 안에 값 여러 개 넣기
- 문자열 안에 값을 두 개 이상 넣으려면 % 를 붙이고, 괄호 안에 값(변수)을 콤마로 구분해서 넣어주면 된다.(값을 괄호로 묶지 않으면 에러가 발생)
- 서식 지정자가 두 개이므로 값도 두 개를 넣었다.# '%d %s' % (숫자, '문자열') >>> 'Today is %d %s.' % (3, 'April') 'Today is 3 April.'
- 서식 지정자가 여러 개면 괄호 안의 값(변수) 개수도 서식 지정자 개수와 똑같이 맞춰주어야 한다.
- 지금까지는 서식 지정자 사이를 공백으로 띄웠는데, 만약 서식 지정자를 서로 붙이면 결과도 붙어서 나오므로 주의해야 한다.
- 서식 지정자를 붙여놔서 3과 'April'이 붙어서 출력되었다.>>> 'Today is %d%s.' % (3, 'April') 'Today is 3April.'
2-6. format 메서드 사용하기
- 파이썬은 문자열을 만들 때 서식 지정자 방식보다 더 간단한 문자열 포매팅(string formatting)을 제공한다.
- 문자열 포매팅은 { } 안에 포매팅을 지정하고 format 메서드로 값을 넣는다.
- 이렇게 문자열 안에 { }를 넣고 인덱스를 지정한 다음, format()에서 { }안에 넣을 값을 지정하면 된다.# '{인덱스}'.format(값) >>> 'Hello, {0}'.format('world!') 'Hello, world!' >>> 'Hello, {0}'.format(100) 'Hello, 100'
2-7. format 메서드로 값을 여러 개 넣기
- { } 에 인덱스를 지정한 뒤 format에는 인덱스가 증가하는 순서대로 값을 넣으면 된다.
- 여기서는 {0} → {2} → {1} 처럼 인덱스 순서를 섞었고, format에는 'Python' → 'Script' → 3.6 순으로 넣었기 때문에 문자열에는 인덱스 숫자에 해당하는 값이 들어가서 'Hello, Python 3.6 Script' 의 순서로 출력된다.>>> 'Hello, {0} {2} {1}'.format('Python', 'Script', 3.6) 'Hello, Python 3.6 Script'
2-8. format 메서드로 같은 값을 여러 개 넣기
- 같은 인덱스가 지정된 { } 를 여러 개 넣으면 같은 값을 여러 개 넣을 수 있다.
>>> '{0} {0} {1} {1}'.format('Python', 'Script') 'Python Python Script Script'
2-9. format 메서드에서 인덱스 생략하기
- { } 에서 인덱스를 생략하면 format에 지정한 순서대로 값이 들어간다.
>>> 'Hello, {} {} {}'.format('Python', 'Script', 3.6) 'Hello, Python Script 3.6'
2-10. format 메서드에서 인덱스 대신 이름 지정하기
- { } 에 인덱스 순서가 아닌 이름을 대신 지정할 수도 있다.(format에는 이름에 해당하는 값을 지정한다.)
>>> 'Hello, {language} {version}'.format(language='Python', version=3.6) 'Hello, Python 3.6'
2-11. 문자열 포매팅에 변수를 그대로 사용하기
- 파이썬 3.6부터는 문자열을 더 간단하게 만드는 방법을 제공하는데, 변수에 값을 넣고 { } 에 변수 이름을 지정하면 된다.
- 이때는 문자열 앞에 포매팅(formatting)이라는 뜻으로 f 를 붙인다.
>>> language = 'Python' >>> version = 3.6 >>> f'Hello, {language} {version}' 'Hello, Python 3.6'
※ 중괄호 { } 자체를 출력할 때는 { {, } } 처럼 중괄호를 두 번 사용하면 된다.
>>> '{{ {0} }}'.format('Python')
'{ Python }'
2-12. format 메서드로 문자열 정렬하기
- 지금까지 문자열의 서식 지정자나 ljust, rjust, center로 정렬했던 것 처럼 문자열 포매팅도 문자열을 정렬할 수 있다.
- 인덱스 뒤에 : (콜론)을 붙이고 정렬할 방향과 길이를 지정해주면 된다.
- '{0 :< 10}' 에서 부등호가 왼쪽을 가리키고 있으므로 문자열을 지정된 길이로 만든 뒤 왼쪽으로 정렬하고 남는 공간을 공백으로 채운다.- '>'을 넣어서 오른쪽을 가리키게 만들면 문자열을 지정된 길이로 만든 뒤 오른쪽으로 정렬하고 남는 공간을 공백으로 채운다.# 왼쪽 정렬 # '{인덱스:<길이}'.format(값) >>> '{0:<10}'.format('python') 'python '
# 오른쪽 정렬 # '{인덱스:>길이}'.format(값) >>> '{0:>10}'.format('python') ' python'
- 인덱스를 사용하지 않는다면 : (콜론)과 정렬 방법만 지정해도 된다.
>>> '{:>10}'.format('python') ' python'
2-13. 숫자 개수 맞추기
- %d 는 % 와 d 사이에 0과 숫자 개수를 넣어주면 자릿수에 맞춰서 앞에 0이 들어간다.
- { } 를 사용할 때는 인덱스나 이름 뒤에 : (콜론)을 붙이고 03d 처럼 0과 숫자 개수를 지정하면 된다.
# '%0개수d' % 숫자 # '{인덱스:0개수d'}'.format(숫자) >>> '%03d' % 1 # 세 자리 숫자 '001' >>> '{0:03d}'.format(35) # 세 자리 숫자 '035'
- 실수도 숫자 개수를 맞출 수 있는데, 소수점 이하 자릿수를 지정하고 싶으면 %08.2f 처럼 . (점) 뒤에 자릿수를 지정해주면 된다.
- 실수는 숫자 개수에 정수 부분, 소수점, 소수점 이하 자릿수가 모두 포함된다는 점을 주의해야 한다.
>>> '%08.2f' % 3.6 '00003.60' >>> '{0:08.2f}'.format(150.37) '00150.37'
2-14. 채우기와 정렬을 조합해서 사용하기
- 문자열 포매팅은 채우기와 정렬을 조합해서 사용할 수 있다.
- { } 에 인덱스, 채우기, 정렬, 길이, 자릿수, 자료형 순으로 지정해주면 된다.
# '{인덱스:[[채우기]정렬][길이][.자릿수][자료형]}' # 길이를 10으로 만든 뒤 왼쪽, 오른쪽으로 정렬하고 남는 공간은 0으로 채우기 >>> '{0:0<10}'.format(15) # 길이 10, 왼쪽으로 정렬하고 남는 공간은 0으로 채움 '1500000000' >>> '{0:0>10}'.format(15) # 길이 10, 오른쪽으로 정렬하고 남는 공간은 0으로 채움 '0000000015'
- 실수로 만들고 싶다면 소수점 자릿수와 실수 자료형 f 를 지정해주면 된다.
>>> '{0:0>10.2f}'.format(15) # 길이 10, 오른쪽으로 정렬하고 소수점 자릿수는 2자리 '0000015.00'
- 채우기 부분에 0이 아닌 다른 문자(공백도 가능)을 넣어도 되고, 채우기 부분을 생략하면 공백이 들어간다.
>>> '{0: >10}'.format(15) # 남는 공간을 공백으로 채움 ' 15' >>> '{0:>10}'.format(15) # 채우기 부분을 생략하면 공백이 들어감 ' 15' >>> '{0:x>10}'.format(15) # 남는 공간을 문자 x로 채움 'xxxxxxxx15'
※ 금액에서 천단위로 콤마 넣기
- format 내장 함수 사용 : format(숫자, ',')
>>> format(1493500, ',') '1,493,500'
- format 함수와 서식 지정자를 함께 사용
>>> '%20s' % format(1493500, ',') # 길이 20, 오른쪽으로 정렬 ' 1,493,500'
- 포매팅에서 콤마를 넣으려면 : (콜론)뒤에 , (콤마)를 지정하면 된다.
>>> '{0:,}'.format(1493500) '1,493,500'
- 정렬을 하고 싶다면 정렬 방향과 같이 뒤에 콤마를 지정해주면 된다.
>>> '{0:>20,}'.format(1493500) # 길이 20, 오른쪽으로 정렬 ' 1,493,500' >>> '{0:0>20,}'.format(1493500) # 길이 20, 오른쪽으로 정렬하고 남는 공간은 0으로 채움 '000000000001,493,500'
'Python 코딩도장' 카테고리의 다른 글
파이썬 코딩도장 Unit 25 정리(2) - 반복문으로 딕셔너리의 키-값 쌍을 모두 출력 (0) | 2022.02.02 |
---|---|
파이썬 코딩도장 Unit 25 정리(1) - 딕셔너리 조작 (0) | 2022.02.01 |
파이썬 코딩도장 Unit 24 정리(1) - 문자열 조작 (0) | 2022.01.28 |
파이썬 코딩도장 Unit 23 정리(4) - 2차원 리스트의 할당과 복사 (0) | 2022.01.27 |
파이썬 코딩도장 Unit 23 정리(3) - 반복문으로 리스트 생성 (0) | 2022.01.26 |