파이썬 프로그래밍(4) - 문자열 포매팅
#문자열 포매팅
1. 정의
문자열 포매팅(string formatting) : 문자열 안에 어떤 값을 삽입하는 방법
>>> line = "We always have to learn more than %d hours" % 3
'We always have to learn more than 3 hours'
2. 대입
문자열 안의 숫자를 넣고 싶은 자리에 %d 문자를 넣고 문장 뒤에 % 문자 다음 원하는 숫자를 넣으면 만들 수 있다.
이때 %d를 '문자열 포맷 코드'라고 부른다.
>>> line = "We always have to learn more than %s hours" % three
'We always have to learn more than three hours'
>>> time = 3
>>> line = "We always have to learn more than %d hours" % time
'We always have to learn more than 3 hours'
물론 문자열이나 변수를 넣을 수도 있다. 이때 주의할 점은 문자열일 때 문자열 포맷 코드는 %s를 사용해야 한다.
3. 2개 이상의 값 넣기
>>> frequency = always
>>> time = 3
>>> line = "We %s have to learn more than %d hours" % (frequency, time)
'We always have to learn more than 3 hours'
2개 이상의 값일 때는 마지막 % 다음 괄호를 쓰고 각각의 값을 쉼표(,)로 구분해 준다.
3. 문자열 포맷 코드
문자열 포맷 코드의 종류는 다음과 같다.
코드 | 설명 |
%s | 문자열(String) |
%c | 문자 1개(character) |
%d | 정수(integer) |
%f | 부동소수(floating-point) |
%o | 8진수 |
%x | 16진수 |
%% | literal % (문자 % 자체) |
*%s 포맷 코드를 사용하면 문자든 숫자든 모든 값을 변환해 넣을 수 있다. 하지만 숫자도 문자열로 취급하게 되니 주의.
여기서 %%란 포맷 코드가 생소한데, 이는 '%'를 출력하기 위해 사용하기 위해 사용되는 것이다.
>> "I studied %d%%" % 70"
'I studied 70%'
#포맷 코드와 숫자 함께 사용
1. 정렬과 공백
>>> "%20s" % "Hello World"
' Hello World'
여기서 %20s는 전체 길이가 20개인 문자열 공간에서 대입되는 값(Hello World)을 오른쪽으로 정렬하고 앞의 공간을 공백으로 남긴다는 뜻이다.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
H | e | l | l | o | W | o | r | l | d |
>>> "%-20s" % "Hello World"
'Hello World '
2. 소수점 표현
>>> "%5.2f" % 3.14159
' 3.14'
#format 함수 사용
1. 숫자, 문자열, 변수 사용
문자열의 {0}, {1}과 같은 인덱스 항목이 format 함수의 입력값으로 순서대로 값이 입력된다.
>>> line = "We always have to learn more than {0} hours".format(3)
'We always have to learn more than 3 hours'
>>> line = "We {0} have to learn more than 3 hours".format("always")
'We always have to learn more than 3 hours'
>>> time = 3
>>> line = "We always have to learn more than {0} hours".format(time)
'We always have to learn more than 3 hours'
그렇기에 2개 이상의 값일때는 아래와 같이 사용된다.
>>> line = "We {0} have to learn more than {1} hours".format("always", 3)
'We always have to learn more than 3 hours'
그 외에도 인덱스 항목(ex. {0}, {1})대신 {name} 형태를 사용할 수도 있다. 이때 format함수에는 반드시 name=value 형태의 입력값을 넣어야 한다.
>>> line = "We always have to learn more than {time} hours".format(time=3)
'We always have to learn more than 3 hours'
2. 정렬과 공백 채우기
(1) 왼쪽 정렬
>>> "{0:<10}".format("Hello")
'Hello '
:<10 표현식으로 문자열을 왼쪽 정렬한 뒤, 문자열의 총 자릿수를 10으로 맞추었다.
(2) 오른쪽 정렬
>>> "{0:>10}".format("Hello")
' Hello'
오른쪽 정렬은 왼쪽과 반대로 ':>' 표현식을 사용한다.
(3) 가운데 정렬
>>> "{0:^10}".format("Hello")
' Hello '
:^를 사용하여 가운데 정렬을 할 수 있다.
(빈칸이 홀수인 경우 왼쪽을 적은 빈칸을 주는 듯 합니다.)
(4) 빈칸 채우기
정렬 문자 바로 앞에 채울 문자를 넣어준다.
>>> "{0:*^10}".format("Hello")
'**Hello***'
(5) 중괄호 표현하기
format 함수를 사용할 시 중괄호({})가 사용되는데, 이 중괄호를 문자 그대로 출력하기 위해서는 2개를 연속해서 사용한다.
>>> "{{Hello}}".format{}
'{Hello}'
#f 문자열 포매팅
1. f 문자열 포매팅
파이썬 버전 3.6부터 사용할 수 있는 기능으로 문자열 앞에 접두사 f를 붙이면 사용할 수 있다.
>>> time=3
>>> f"We always have to learn more than {time} hours"
'We always have to learn more than 3 hours'
그 외에도 정렬과 공백 채우기도 마찬가지로 사용할 수 있다.
#문자열 관련 함수
1. 문자 개수 세기(count)
count 함수로 문자열 중 필요한 문자가 몇개인지 알 수 있다.
>>> line = "Hello World"
>>> line.count('l')
3
2. 위치 찾기(find, index)
(1) find
find 함수로 찾는 문자 중 처음으로 나온 위치를 알 수 있다. 찾는 문자가 없다면 -1을 리턴한다.
>>> line = "Hello World"
>>> line.find('e')
1
>>>line.find('z')
-1
(2) index
index 함수 또한 찾는 문자 중 처음으로 나온 위치를 알 수 있다. 찾는 문자가 없다면 오류가 발생한다.
>>> line = "Hello World"
>>> line.index('e')
1
>>> line.index('x')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-7-f0ff6df68dac> in <cell line: 2>()
1 line = "Hello World"
----> 2 line.index('x')
ValueError: substring not found
3. 문자열 삽입(join)
join 함수를 통해 문자열 사이에 원하는 문자를 삽입할 수 있다.
>>> "-".join('Hello')
'H-e-l-l-o'
4. 소문자를 대문자로 변경(upper)
upper 함수로 소문자를 대문자로 변경할 수 있다. 모두 대문자라면 변화가 일어나지 않는다.
>>> line = "Hello World"
>>> line.upper()
'HELLO WORLD'
5. 대문자를 소문자로 변경(lower)
lower 함수로 대문자를 소문자로 변경할 수 있다. 모두 소문자라면 변화가 일어나지 않는다.
>>> line = "Hello World"
>>> line.lower()
'hello world'
6. 공백 지우기(lstrip, rstrip, strip)
strip 함수로 문자열의 공백을 지울 수 있다. 왼쪽 공백이라면 lstrip, 오른쪽이라면 rstrip, 양쪽 다 지우려면 strip을 사용한다.
>>> line = " Hello "
>>> line.lstrip()
'Hello '
>>> line.rstrip()
' Hello'
>>> line.strip()
'Hello'
7. 문자열 바꾸기(replace)
replace 함수(replace(바뀔_문자열, 바꿀_문자열)를 사용하여 특정 문자열을 변경할 수 있다.
>>> line = "Hello World"
>>> line("Hello", "Welcome")
'Welcome World'
8. 문자열 나누기(split)
split 함수를 통해 문자열을 나누어 줄 수 있다. split()처럼 괄호 안에 값이 없다면 공백을 기준으로 문자열을 나눈다. 하지만 괄호 안에 '.', '-' 등 값이 있다면 해당 값을 구분자로 하여 문자열을 나눈다.
>>> line = "Hello World"
>>> line.split()
['H', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']
>>> line.split('o')
['Hell', 'W', 'rld']
함수를 사용하였다 하더라도 실질적으로 변수의 값을 변경하는 것은 아니다. 값을 저장하고 싶다면 다른 변수나
'변수 = 변수.문자열 함수' 를 통해 값을 저장해야 한다.
(해당 자료는 '점프 투 파이썬'을 참고하여 정리하였습니다)