본문 바로가기

Programing/Python

[Python 입문] 3. 파이썬 자료형 - 문자열 02

목차

  • 문자열 포매팅
  • 고급 문자열 포매팅
  • 문자열 관련 함수들

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']

 

 

내용 출처: 책 '점프 투 파이썬'의 내용