본문 바로가기

파이썬 기초

02-2 문자열 연산하기 ~ 포매팅 - 3

파이썬에서는 문자열을 더하거나 곱할 수 있다.

파이썬만의 장점이다.

 

1. 문자열 더해서 연결하기 

head = "Python"
tail = "is fun"
head + tail
'python is fun!'

 

2. 문자열 곱하기

a = "Python"
a * 2
'pythonpython'

 

3. 문자열 곱하기 응용

 

 #multistring.py
 
 print("=" * 50)
 print("My Program")
 print("=" * 50)

라고 쓰면, 아래와 같은 결괏값이 나타날 것이다.

이런 식의 표현은 앞으로 자주 사용하게 될 것이다. 프로그램을 만들어 실행시켰을 때 출력되는 화면 제일 위쪽에 프로그램 제목을 이와같이 하면 깔끔하고 보기 좋다.

 

4. 문자열 길이 구하기 

문자열의 길이는 len함수를 사용하면 구할 수 있다.

len함수는 print 함수처럼 파이썬의 기본 내장 함수로 별다른 설정 없이 바로 사용할 수 있다.

a = "Life is too shoer"
len(a)
17

 

문자열 인덱싱과 슬라이싱

 

문자열 인덱싱이란?

예를 실행해 알아보자.

a =" Life is too short, You need Pyhon"
a[3]
'e'

a[3]이 뜻하는 것은 a라는 문자열의 네 번째 문자 e를 말한다.

숫자3이 왜 네번째 문자인가?

답은 "파이썬은 0부터 숫자를 센다."

 

문자열 인덱싱 활용하기

 

예를 몇 가지 더 보자.

a = "Life is too short, You need Python"
a[0]
'L'
a[12]
's'
a[-1]
'n'

-1 은 뒤에서부터 세어 첫 번째가 되는 문자를 말한다, 따라서 n 이다.

(-0과 0은 참고로 똑같다.)

 

문자열 슬라이싱이란?

 

단순히 한 문자만 뽑아내는 것이 아니라 You 와 같은 단어를 뽑아내는 방법이다.

 

a = "Life is too short, You need Python"
b = a[0] + a[1] + a[2] + a[3]
b
'life'

위 방법 또는 더 좋은 방법으로 아래를 보자.

a = "Life is too short, You need Python"
a[0:4]
'Life'

a[0:4]가 뜻하는 것은 a 문자열, 즉자리번호 0부터 4까지의 문자를 뽑아낸다는 뜻이다.

 

a[0:3]
'Lif'

이렇게 되는 이유는 간단하다. 슬라이싱 기법으로 a[시작 번호:끝 번호]를 지정할 때 끝 번호에 해당하는 것은 포함하지 않기 때문이다.

 

문자열을 슬라이싱하는 방법

a[0:5]
'Life'

위 예는 a[0] + a[1] + a[2] + a[3] + a[4]와 동일하다. a[4]는 공백 문자이기 때문에 'Life'가 아닌 'Life'가 출력된다. 공백 문자 역시 L, i, f, e 같은 문자와 동일하게 취급되는 것을 잊지말자.

'Life'와 'Life'는 완전히 다른 문자열이다.

 

슬라이싱으로 문자열 나누기

 

다음은 자주 사용하게 되는 슬라이싱 기법 중 하나이다.

 

a = "20010331Rainy"
date = a[:8]
weather = a[8:]
date
'20010331'
weather
'Rainy'

 

 

 

위 에는 문자열 a를 두 부분으로 나누는 기법이다. 숫자 8을 기준으로 문자열 a를 양쪽으로 한번씩 슬라이싱했다.

a[:8]은 a[8]이 포함되지 않고, a[8:]은 a[8]을 포함하기 때문에 8을 기준으로 해서 두 부분으로 나눌 수 있는 것이다.

 

위 예에서는 날짜를 나타내는 부분인 '20010331'과 날씨를 나타내는 'Rainy'로 나누는 방법을 보여 준다.

 

a = "20010331Rainy"
year = a[:4]       처음부터 a[3]까지
day = a[4:8]       a[4]부터 a[7]까지
weather = a[8:]    a[8]부터 마지막까지
year
'2001'
day
'0331'
weahter
'Rainy'

위 예는 숫자 4와 8로 "20010331Rainy" 문자열을 세 부분으로 나누는 방법을 보여 준다.

 

문자열 포매팅

1. 숫자 바로 대입 

" I eat %d apples." %3
'I eat 3 apples.'

정수 3을 삽입하는 방법을 보여준다.

 

2. 문자열 바로 대입

 

"I eat %s apples." % "five"
'I eat five apples.'

 

3. 숫자 값을 나타내는 변수로 대입

number = 3
"I eat %d apples." %number
'I eat 3 apples.'

 

4. 2개 이상의 값 넣기

 

number = 10
day = "three"
"I ate %d apples. so I was sick for %s days." %(number, day)
'I ate 10 apples. so I was sick for three days.'

 

위 예문처럼 2개 이상의 값을 넣으려면 마지막 % 다음 괄호 안에 콤마(,)로 구분하여 각각의 값을 넣어 주면 된다.

 

포맷 코드와 숫자 함께 사용하기

1. 정렬과 공백

 

"%10s" % "hi"
'     hi'     hi가 오른쪽 정렬됨

 

"%-10sjane" % 'hi'
'hi     jane'     hi가 왼족 정렬됨

hi를 왼쪽으로 정렬하고 나머지는 공백으로 채웠음을 볼 수 있다.

 

2. 소수점 표현하기

 

"%0.4f"% 3.42134234
'3.4213'

3.42134234를 소수점 네 번째 자리까지만 나타내고 싶은 경우에는 위와 같이 사용한다. 즉 여기서 '.'의 의미는 소수점 포인트를 말하고 그 뒤의 숫자 4는 소수점 뒤에 나올 숫자의 개수를 말한다. 다음 예를 보자.

"%10.4f" % 3.42134234
'    3.4213'

3.42134234를 소수점 네 번째 자리까지만 표시하고 전체 길이가 10개인 문자열 공간에서 오른쪽으로 정렬하는 예를 보여 준다.

 

format 함수를 사용한 포매팅

 

숫자 바로 대입하기

 

"I eat {0} apples". format(3)
'I eat 3apples'

'I eat 3apples'문자열 중 {0}부분이 숫자 3으로 바뀌었다.

 

문자열 바로 대입하기

 

"I eat {0} apples".format("five")
'I eat five apples'

문자열의 {0} 항목이 five라는 문자열로 바뀌었다.

 

숫자 값을 가진 변수로 대입하기

 

number = 3 
"I eat {0} apples". format(number)
'I eat apples'

문자열의 {0} 항목이 number 변수값인 3으로 바뀌었다.

 

2개 이상의 값 넣기

 

number = 10
day = "three"
"I ate {0} apples. so I was sick for {1} days.".format(number, day)
'I ate 10 apples. so I was sick for three days.'

 

2개 이상의 값을 넣을 경우 문자열의 {0},{1}과 같은 인덱스 항목이 format 함수의 입력값으로 순서에 맞게 바뀐다.

 

이름으로 넣기

 

"I eat {number} apples. so I was sick for {day}.".format(number=10,  day=3)
'I was 10 apples. so I was sick for days.'

위 예에서 볼 수 있듯이 {0},{1}과 같은 인덱스 항목 대신 더 편리한 {name}형태를 사용하는 방법도 있다.

{name}, 형태를 사용할 경우 format 함수에는 반드시 name=value 와 같은 현태의 입력값이 있어야만 한다.

 

 

인덱스와 이름을 혼용해서 넣기

 

"I ate {0} apples. so i was sick for {day} days.".format(10, day=3)
'I ate 10 apples. si I was sick for 3 days.'

 

위와 같이 인덱스 항목과 name=value 형태를 혼용하는 것도 가능하다.

 

 

왼쪽 정렬

 

"{0:<10}".format("hi")
'hi     '

 

:>10 표현식을 사용하면 치환되는 문자열을 왼쪽으로 정렬하고 문자열의 총 자릿수를 10으로 맞출 수 있다.

 

오른쪽 정렬

 

"{0:10}".format("hi")
'     hi'

 

오른쪽 정렬은 :< 대신:>을 사용하면 된다. 화살표 방향을 생각하면 어느 쪽으로 정렬되는지 바로 알 수 있을 것이다.

 

가운데 정렬

 

"{0:^10}".format("hi")
'     hi     '

:^ 기호를 사용하면 가운데 정렬도 가능하다.

 

공백 채우기

 

"{0:=^10}".format("hi")
'====hi===='
"{0:!<10}".format("hi")
'hi!!!!!!!!'

 

정렬할 때 공백 문자 대신에 지정한 문자 값으로 채워 넣는 것도 가능하다. 채워 넣을 문자 값은 정렬 문자 <,>,^

바로 앞에 넣어야 한다. 위 예에서 첫 번째 예제는 가운데(^)로 정렬하고 빈 공간을 = 문자로 채웠고, 두 번째에 예제는 왼쪽 (<)으로 정렬하고 빈공간을 ! 문자로 채웠다.

 

소수점 표현하기

 

y = 3.42134234
"{0:0.4f}".format(y)
'3.4213'

위 예는 format 함수를 사용해 소수점을 4자리까지만 표현하는 방법을 보여 준다. 앞에서 살펴보았던 표현식 0.4f 를 그대로 사용한 것을 알 수 있다.

 

{ 또는 } 문자 표현하기

 

"{{ and }}".format()
'{ and }'

 

format 함수를 사용해 문자열 포매팅을 항 경우 {}와 같은 중괄호(brace) 문자를 포매팅 문자가 아닌 문자 그대로 사용하고 싶은 경우에는 위 예의 {{}}처럼 2개를 연속해서 사용하면 된다.

 

f 문자열 포매팅

 

파이썬 3.6버전부터는 f 문자열 포매팅 기능을 사용할 수 있다. 파이썬 3.6미만 버전에는 사용 불가능.

 

name = '금동훈'
age = 30
f'나의 이름은 {name} 입니다. 나이는  {age}입니다.'
'나의 이름은 금동훈입니다. 나이는 30입니다.'

 

f문자열 포매팅은 위와 같이 name, age와 같은 변수 값을 생성한 후에 그 값을 참조할 수 있다. 

 

딕셔너리는 f 문자열 포매팅에서 다음과 같이 사용 할 수 있다.

 

d = { 'name' :'홍길동' , 'age':30}
f'나의 이름은 {d["name"]}입니다. 나이는 {d["age"]}입니다.'
'나의 이름은 홍길동입니다. 나이는 30입니다.'

 

정렬은 다음과 같이 할 수 있다.

 

f'{"hi":<10}'
'hi     '
f'{"hi":>10}'
'       hi'
f'{"hi":^10}'
'    hi    '

 

공백 채우기는 다음과 같이 할 수 있다.

 

f'{"hi":=^10}'
'====hi===='
f'{"fi":!<10}'
'hi!!!!!!!!'

 

소수점은 다음과 같이 표현할 수 있다.

 

y = 3.42134234
f'{y:0.4f}'     소수점 4자리까지만 표현
'3.4213'
f'{y:10.4f}'    소수점 4자리까지 표현하고 총 자릿수를 10으로 맞춤
'    3.4213'

 

f문자열 에서 {}문자를 표시하려면 다음과 같이 두 개를 동시에 사용해야 한다.

f'{{ and }}'
'{ and }'

 

 

문자열 관련 함수

 

문자 개수 세기(count)

 

a = "hobby"
a.count('b')
2

문자열 중 문자 b의 개수를 돌려준다.

 

위치 알려주기 1 (find)

 

a = "Python is the best choice"
a.find('b')
14
a.find('k')
-1

 

위치 알려주기 2 (index)

 

a = "Life is too short"
a.index('t')
8
a.index('k')
Traceback (most recent call last):
file "<stdin>", line 1, in <module>
ValueError: substring not found

 

문자열 삽입 (join)

 

",".join('abcd')
'a,b,c,d'

abcd 문자열의 각각의 문자 사이에 ','를 삽입한다.

 

",".join(['a','b','c','d'])
'a,b,c,d'

 

소문자를 대문자로 바꾸기

 

a= "hi"
a.upper()
'HI'

upper 함수는 소문자를 대문자로 바꾸 준다.

 

 

대문자를 소문자로 바꾸기 

 

a = "HI"
a.lower()
'hi'

lower함수는 대문자를 소문자로

 

왼쪽 공백 지우기 

 

a = " hi "
a.lstrip()
'hi '

 

오른쪽 공백 지우기 

 

a= "  hi  "
a.rstrip()
'  hi'

 

양쪽 공백 지우기

 

a = " hi "
a.strip()
'hi'

 

문자열 바꾸기

 

a = "Life is too short"
a.replace ("Life", "Your leg")
'Your leg is too short'

replace(바뀌게 될 문자열, 바꿀 문자열) 처럼 사용해서 문자열 안의 특정한 값을 다른 값으로 치환해 준다.

 

 

문자열 나누기

 

a= 'Life is too short'
a.split()    공백을 기준으로 문자열 나눔
['Life', 'is', 'too', 'short']
b= "a:b:c:d"
b.split(':')    :기호를 기준으로 문자열 나눔
['a', 'b', 'c', 'd']

 

 

위에서 소개한 문자열 관련 함수는 관련 함수는 문자열 처리에서 사용 빈도가 매우 높고 유용하다. 이 외 에도 몇 가지가 더 있지만 자주 사용되지는 않는다.

 

출처 : "점프투파이썬"

'파이썬 기초' 카테고리의 다른 글

02-4 튜플 자료형  (0) 2021.03.13
02-3 리스트 자료형  (0) 2021.03.13
02- 2 문자열 자료형 - 2  (0) 2021.03.04
02-2 문자열 자료형  (0) 2021.03.01
02-1 프로그래밍의 기초, 자료형 (숫자형)  (0) 2021.03.01