목차
- 문자열 포매팅
- 고급 문자열 포매팅
- 문자열 관련 함수들
6. 문자열 포매팅(Formatting)
"현재 온도는 18도입니다."
"현재 온도는 20도입니다."
위 두 문자열에서 18과 20과 같은 특정한 값을 바꿔야 할 경우 이것을 가능하게 하는 것이 바로 문자열 포매팅(Formatting) 기법이다. 문자열 포매팅이란 문자열 내에 특정 값을 넣는 방법이다.
6.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 eat %d apples. so I was sick for %s days." %(number, day) <---- 괄호 안에 콤마(,)로 구분해 변수입력
'I eat 10 apples. so I was sick for Three days.'
위 소스코드의 첫 부분을 보면 %d와 %s라는 문자열 포맷 코드라는 것을 사용한다. 숫자는 %d, 문자열은 %s를 써야 한다.
6.2. 문자열 포맷 코드
아래 표의 내용과 같은 문자열 포맷 코드가 있다.
%s | 문자열 (String) |
%c | 문자 1개 (Character) |
%d | 정수 (Integer) |
%f | 부동 소수 (Floating-Point) |
%0 | 8진수 |
%x | 16진수 |
%% | Literal % (문자 '%' 자체) |
여기서 %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는 자동으로 % 뒤에 있는 값을 문자열로 바꿔준다.
6.3. 포매팅 연산자와 %를 같이 사용할 때
'Error is 98%'라는 문자열을 출력하기 위해 아래와 같은 입력을 하면 값 오류(Value Error)가 발생한다.
>>> "Error is %d%." % 98
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: incomplete format
문자열 포맷 코드인 %d와 %가 같은 문자열 내에서 사용할 경우, %를 나타내려면 반드시 %%로 써야 하는 법칙이 있다. 당연히 문자열 내에 %d와 같은 포매팅 연산자가 없으면 그냥 %로 써도 상관없다.
>>> "Error is %d%%." %98
'Error is 98%.'
이를 참고해서 위와 같이 소스코드를 작성하면 된다.
6.4. 포맷 코드와 숫자 함께 사용
정렬과 공백
포맷 코드를 아래 소스코드와 같이 숫자와 함께 사용하면 더 유용하다.
# 오른쪽 정렬
>>> "%10s" %'hi'
' hi' <---- hi를 오른쪽에 정렬
# 왼쪽 정렬
>>> "%-10s" %'hi'
'hi ' <---- hi를 왼쪽에 정렬
위 두 가지의 소스코드는 아래의 표와 같은 뜻이다.
%10s: 전체 길이 10칸 중 앞 8칸의 공백을 띄우고 입력
h | i |
%-10s: 전체 길이 10칸 중 앞 2칸에 입력 후 뒤 8칸이 공백 생성
h | i |
소수점 표현
# 소수점 네 번째 자리까지만 출력
>>> "%0.4f" %3.42134234
'3.4213'
# 소수점 네 번째 자리를 오른쪽 정렬
>>> "%10.4f" %3.42134234
' 3.4213'
첫 번째 소스코드는 소수점 숫자를 네 번째 자리까지만 출력하라는 뜻이고, 두 번째 소스코드는 같은 네 번째 자리를 전체 길이 10칸 중 앞 2칸인 공간에서 오른쪽으로 정렬해서 출력하라는 뜻이다. (아래 표 참고)
3 | . | 4 | 2 | 1 | 3 |
고급 문자열 포매팅
문자열의 format함수를 위에서 봤던 문자열 포매팅 예제들에 적용할 수 있다. (이 방법을 앞으로 더 많이 사용할 것 같다.)
# 숫자 바로 대입
>>> "I eat {0} apples" .format(3) <---- {0}을 숫자 3으로 변경
'I eat 3 apples'
# 문자열 바로 대입
>>> "I eat {0} apples" .format("five") <---- {0}을 five라는 문자열로 변경
'I eat five apples'
# 숫자 값을 나타내는 변수로 대입
>>> number = 3
>>> "I eat {0} apples" .format(number) <---- {0}을 변수 number의 값인 3으로 변경
'I eat 3 apples'
# 2개 이상의 값 대입
>>> number = 10
>>> day = "three"
>>> "I ate {0} apples. so I was sick for {1} days." .format(number, day) <--- {0}과 {1}을 변수 number와 day의 값을 순서대로 변경
'I ate 10 apples. so I was sick for three days.'
# 왼쪽 정렬
>>> "{0:<10}" .format('hi') <---- 치환되는 문자열을 왼쪽으로 정렬
'hi '
# 오른쪽 정렬
>>> "{0:>10}" .format('hi')
' hi'
# 가운데 정렬
>>> "{0:^10}" .format('hi')
' hi '
format함수를 사용해 몇 가지의 예제들을 더 만들어 본다.
# 이름으로 넣기
>>> "I ate {number} apples. so I was sick for {day}." .format(number = 10, day = 3) <---- 문자열의 {number}와 {day}가 format함수의 입력값을 이름에 맞게 가져간다.
'I ate 10 apples. so I was sick for 3.'
# 인덱스와 이름 혼용
>>> "I ate {0} apples. so I was sick for {day} days." .format(10, day = 3)
'I ate 10 apples. so I was sick for 3 days.'
# 공백 채우기
>>> "{0:=^10}" .format('hi')
'====hi===='
>>> "{0:!<10}" .format('hi')
'hi!!!!!!!!'
# 소수점 표현
>>> y = 3.42134234
>>> "{0:0.4f}" .format(y) <---- 표현식 0.4f를 그대로 이용
'3.4213'
이름으로 넣을 경우 name=value와 같은 형태의 입력값이 있어야만 한다.
그리고 공백 채우기의 경우 채워 넣을 문자 값을 정렬 문자인 <, >, ^ 바로 앞에 넣어야 한다.
문자열 관련 함수들
문자열 자료형 자체적으로 가지고 있는 함수들이 있다. 문자열 변수 이름 뒤에 마침표 '.'을 붙인 다음 함수 이름을 쓰면 된다.
# 문자 개수 세기 (count)
>>> a = "hobby"
>>> a.count('b') <---- 문자열 중 문자 b의 갯수 반환
2
# 위치 알려주기1 (find)
>>> a = "Python is best choice"
>>> a.find('b') <---- 문자열 중 문자 b가 처음 나온 위치 반환
10
>>> a.find('k')
-1 <---- 찾는 문자나 문자열이 없으면 -1을 반환
# 위치 알려주기2 (index)
>>> a = "Life is too short"
>>> a.index('t') <---- 문자열 중 t가 처음 나온 위치 반환
8
>>> a.index('k')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found <---- 찾는 문자나 문자열이 없으면 오류 발생
# 문자열 삽입 (join)
>>> a = ","
>>> a.join('abcd') <---- 문자열 abcd의 각 문자 사이에 변수a의 값인 ',' 삽입
'a,b,c,d'
# 소문자를 대문자로 변경 (upper)
>>> a = "hi"
>>> a.upper() <---- 문자열의 소문자를 대문자로 변경 (문자열이 이미 대문자라면 아무 변화 없음)
'HI'
# 대문자를 소문자로 변경 (lower)
>>> a = "HI"
>>> a.lower() <---- 문자열의 대문자를 소문자로 변경
'hi'
# 왼쪽 공백 제거 (lstrip)
>>> a = " hi "
>>> a.lstrip() <---- 문자열 중 왼쪽에 있는 공백 모두 제거 (l은 left를 의미)
'hi '
# 오른쪽 공백 제거 (rstrip)
>>> a = " hi "
>>> a.rstrip() <---- 문자열 중 오른쪽에 있는 공백 모두 제거 (r은 right를 의미)
' hi'
# 양쪽 공백 제거 (strip)
>>> a = " hi "
>>> a.strip() <---- 문자열 양쪽에 있는 공백 모두 제거
'hi'
# 문자열 변경 (replace)
>>> a = "Life is too short"
>>> a.replace("Life", "Your leg") <---- replace(바뀔 문자열, 바꿀 문자열)로 특정 값을 다른 값으로 변경
'Your leg is too short'
# 문자열 나누기 (split)
>>> a = "Life is too short"
>>> a.split() <---- 공백을 기준으로 문자열 나누기
['Life', 'is', 'too', 'short']
>>> a = "a:b:c:d"
>>> a.split(':') <---- 기호 :를 기준으로 문자열 나누기
['a', 'b', 'c', 'd']
내용 출처: 책 '점프 투 파이썬'의 내용
'Programing > Python' 카테고리의 다른 글
[Python 입문] 4. 파이썬 자료형 - 리스트 (0) | 2022.01.03 |
---|---|
[Python 입문] 3. 파이썬 자료형 - 문자열 01 (0) | 2021.12.10 |
[Python 입문] 2. 파이썬 자료형 - 숫자 (0) | 2021.12.10 |
파이썬(Python)을 위한 파이참(PyCharm)와 아나콘다(Anaconda) (1) | 2021.12.10 |
[Python 입문] 1. 파이썬(Python)이란? (0) | 2021.12.08 |