점프 투 파이썬 - 문자열 자료형
Language/Python

점프 투 파이썬 - 문자열 자료형

뉴비뉴 2019. 7. 6.

문자열

1. 큰따옴표 " 로 양쪽 둘러싸기

2. 작은따옴표 ' 로 양쪽 둘러싸기

3. """ 큰따옴표 3개를 연속으로 써서 둘러싸기

4. ''' 작은옴표를 3개를 연속으로 써서 양쪽 둘러싸기

 

문자열 안에 작은따옴표나 큰따옴표를 포함시키고 싶을 때

1. 문자열에 작은따옴표 ' 포함시키기

ex) Python's favorite food is perl

이럴 때는 다음과 같이 문자열을 큰따옴표로 둘러싸야한다. 큰따옴표 안에 들어 있는 작은따옴표는 문자열을 나타내기 위한 기호로 인식되지 않는다.

>>> food = "Python's favorite food is perl"

>>> food

"Python's favorite food is perl"

 

2. 문자열에 큰따옴표 " 포함시키기

ex) "Python is very easy." he says.

작은따옴표로 둘러싸면 된다.

>>> say = '"Python is very easy." he says.'

 

3. 백슬래시(\)를 사용해서 작은따옴표와 큰따옴표를 문자열에 포함시키기

>>> food = 'Python\'s favorite food is perl'

>>> say = "\"Python is very easy.\" he says."

 

여러 줄인 문자열을 변수에 대입하고 싶을 때

ex)

Life is too short

You need python

 

1. 줄을 바꾸기 위한 이스케이프 코드 \n 삽입하기

>>> multiline = "Life is too short\nYou need python"

 

2. 연속된 작은따옴표 3개(''') 또는 큰따옴표 3개(""") 사용하기

>>> multiline = '''

.  .  . Life is too short

.  .  . You need python

.  .  . '''

 

문자열 연산하기

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

 

문자열 더해서 연결하기

>>> head = "Python"

>>> tail = " is fun!"

>>> head + tail

'Python is fun!

 

문자열 곱하기

>>> a = "python"

>>> a * 2 

'pythonpython'

 

문자열 곱하기 응용

print("=" * 50)
print("My Program")
print("="* 50)


==================================================
My Program
==================================================

문자열 길이 구하기

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

>>> a = "Life is too short"

>>> len(a)

17

 

문자열 인덱싱과 슬라이싱

인덱싱(indexing)이란 무엇인가를 "가리킨다"는 의미이고, 슬라이싱(Slicing)은 무엇인가를 "잘라낸다"는 의미이다.

 

문자열 인덱싱이란?

>>> a = "Life is too short, You need Pyhton"

위 소스 코드에서 변수 a에 저장한 문자열의 각 문자마다 번호를 매겨 보면 다음과 같다.

Life is too short, You need Python
0         1         2         3 
0123456789012345678901234567890123

"Life is too short, You need Python" 문자열에서 L은 첫 번째 자리를 뜻하는 숫자0,

바로 다음인 i는 1 이런 식으로 계속 번호를 붙인 것이다. 중간에 있는 short의 s는 12가 된다.

 

>>> a = "Life is too short, You need Python"

>>> a[3]

'e'

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

 

문자열 인덱싱 활용하기

>>> a = "Life is too short, You need Python"

>>> a[0]

'L'

>>> a[12]

's'

>>> a[-1]

'n'

a[-1] 문자열을 뒤에서 읽기 위해 마이너스 기호를 붙이는 것이다.

하지만 0과 -0은 똑같은 것이기 때문에 똑같은 값을 보여준다.

 

문자열 슬라이싱이란?

그렇다면 "Life is too short, You need Python" 문자열에서 단순히 한 문자만을 뽑아내는 것이 아니라 'Life' 또는 '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[시작 번호:끝 번호]를 지정할 때 끝 번호에 해당하는 것은 포함하지 않는다.

a[0:3] 을 수식으로 나타내면 다음과 같다.

0 <= a <3

 

문자열 슬라이싱 하는 방법

>>> a[0:5]

'Life '

>>> a[0:2]

'Li'

>>> a[5:7]

'is'

>>> a[12:17]

'short'

 

a[시작 번호:끝 번호] 에서 끝 번호 부분을 생략하면 시작 번호부터 그 문자열의 끝까지 뽑아낸다.

>>> a[19:]

'You need Python'

a[시작 번호:끝 번호] 에서 시작 번호를 생략하면 문자열의 처음부터 끝 번호를 뽑아낸다.

>>> a[:17]

'Life is too short'

a[시작 번호:끝 번호] 에서 시작 번호와 끝 번호를 생략하면 문자열의 처음부터 끝까지를 뽑아낸다.

>>> a[:]

'Life is too short, You need Python'

슬라이싱에서도 인덱싱과 마찬가지로 마이너스(-) 기호를 사용할 수 있다.

 

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

 

>>> a = "20010331Rainy"

>>> date = a[:8] # 2001103

>>> weather = a[8:] # Rainy

>>> date

'20010331'

>>> weather

'Rainy'

 

>>> a = "20010331Rainy"

>>> year = a[:4]

>>> day = a[4:8]

>>> weather = a[8:]

>>> year

'2001'

>>> day

'0331'

>>> weather

'Rainy'

 

["Pithon"이라는 문자열을 "Python"으로 바꾸려면?]

Pithon 문자열을 Python으로 바꾸려면 어떻게 해야 할까? 제일 먼저 떠오르는 생각은 다음과 같을 것이다.

>>> a = "Pithon" >>> a[1] 'i' >>> a[1] = 'y'

즉 a 변수에 "Pithon" 문자열을 대입하고 a[1]의 값이 i니까 a[1]을 y로 바꾸어 준다는 생각이다. 하지만 결과는 어떻게 나올까?

당연히 오류가 발생한다. 왜냐하면 문자열의 요솟값은 바꿀 수 있는 값이 아니기 때문이다(문자열 자료형은 그 요솟값을 변경할 수 없다. 그래서 immutable한 자료형이라고도 부른다).

하지만 앞에서 살펴본 슬라이싱 기법을 사용하면 Pithon 문자열을 사용해 Python 문자열을 만들 수 있다.

다음 예를 보자.

>>> a = "Pithon" >>> a[:1] 'P' >>> a[2:] 'thon' >>> a[:1] + 'y' + a[2:] 'Python'

위 예에서 볼 수 있듯이 슬라이싱을 사용하면 "Pithon" 문자열을 'P' 부분과 'thon' 부분으로 나눌 수 있기 때문에 그 사이에 'y' 문자를 추가하여 'Python'이라는 새로운 문자열을 만들 수 있다.

 

문자열 포매팅

1. 숫자 바로 대입

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

'I eat 3 apples.'

 

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

 

여기서 재미있는 것은 %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를 사용하면 이런 것을 생각하지 않아도 된다. 왜냐하면 %s는 자동으로 5 뒤에 있는 값을 문자열로 바꾸기 때문이다.

 

[포매팅 연산자 %d와 %를 같이 쓸 때는 %%를 쓴다]

>>> "Error is %d%." % 98

 

위 예문의 결괏값으로 당연히 "Error is 98%."가 출력될 것이라고 예상하겠지만 파이썬은 값이 올바르지 않다는 값 오류(Value Error) 메시지를 보여 준다.

 

Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: incomplete format

 

이유는 문자열 포맷 코드인 %d와 %가 같은 문자열 안에 존재하는 경우, %를 나타내려면 반드시 %%로 써야 하는 법칙이 있기 때문이다. 이 점은 꼭 기억해 두어야 한다. 하지만 문자열 안에 %d 같은 포매팅 연산자가 없으면 %는 홀로 쓰여도 상관이 없다.

 

따라서 위 예를 제대로 실행하려면 다음과 같이 해야 한다.

 

>>> "Error is %d%%." % 98 'Error is 98%.'

 

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

위에서 보았듯이 %d, %s 등의 포맷 코드는 문자열 안에 어떤 값을 삽입하기 위해 사용하낟.

하지만 포맷 코드를 숫자와 함께 사용하면 더 유용하게 사용할 수 있다.

 

1. 정렬과 공백

>>> "%10s" % "hi"

'          hi'

전체 길이가 10개인 문자열 공간에서 대입되는 값을 오른쪽으로 정렬하고 그 앞의 나머지는 공백으로 남겨둬라

 

그렇다면 반대쪽인 왼쪽 정렬은

>>> "%-10sjane." % 'hi'

'hi          jane.'

 

2. 소수점 표현하기

>>> "%0.4f" % 3.42134234

'3.4213'

.4f 소수점 네 번째 자리까지만 나타내고 싶은 경우

 

>>> "%10.4f" % 3.42134234

'    3.4213'

[!] 3.4213이 6개 자리를 차지하니 공백은 4개가 추가된다.

 

format 함수를 사용한 포매팅

문자열의 format 함수를 사용하면 좀 더 발전된 스타일로 문자열 포맷을 지정할 수 있다.

 

숫자 바로 대입하기

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

'I eat 3 apples'

문자열 바로 대입하기

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

'I eat five apples'

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

>>> number = 3

>>> "I eat {0} apples".format(number)

'I eat 3 apples'

 

2개 이상의 값 넣기

>>> number = 10

>>> day = "three"

>>> "I ate {0] appels. 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 ate {number} apples. so I was sick for {day} days.".format(number=10, day=3)

'I ate 10 apples. so I was sick for 3 days.'

 

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

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

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

 

왼쪽 정렬(:<)

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

'hi        '

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

오른쪽 정렬(:>)

>>> "{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'

 

>>> "{0:10.4f}".format(y)

'    3.4213'

 

{ 또는 } 문자 표현하기

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

'{ and }'

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

 

f 문자열 포매팅

3.6 버전부터는 f 문자열 포매팅 기능을 사용할 수 있다.

>>> name = '홍길동'

>>> age = 30

>>> f'나의 이름은 {name}입니다. 나이는 {age} 입니다.'

'나의 이름은 홍길동입니다. 나이는 30입니다.'

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

더 간편하다고 생각하면 된다.

 

>>> age = 30

>>> f'나는 내년이면 {age+1}살이 된다.'

'나는 내년이면 31살이 된다.'

 

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

[!] 딕셔너리는 Key와 Value라는 것으로 한 쌍으로 갖는 자료형이다.

 

>>> d = {'name':'홍길동','age':30}

>>> f'나의 이름은{d["name"]}입니다. 나이는 {d["age"]}입니다.'

'나의 이름은 홍길동입니다. 나이는 30입니다.

 

 

문자열 관련 함수들

문자 개수 세기(count)

>>> a = "hobby"

>>> a. count('b')

2

 

위치 알려주기1(find)

>>> a = "Python is the best choice"

>>> a.find('b')

14

>>> a.find('k)

-1

 

문자열 중 문자 b가 처음으로 나온 위치를 반환한다. 만약 찾는 문자나 문자열이 존재하지 않는다면 -1을 반환한다.

 

위치 알려주기2(index)

>>> a = "Life is too short"

>>> a.index('t')

8

>>> a.index('k') !!! 오류발생

 

문자열 삽입(join)

>>> ",".join('abcd')

'a,b,c,d'

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

 

소문자를 대문자로 바꾸기(upper)

 

대문자를 소문자로 바꾸기(lower)

 

왼쪽 공백 지우기(lstrip)

 

오른쪽 공백 지우기(rstrip)

 

양쪽 공백 지우기(strip)

 

문자열 바꾸기(replace)

>>> a = "Life is too short"

>>> a.replace("Life", "Your leg")

'Your leg is too short'

 

문자열 나누기(split)

>>> a = "Life is too short"

>>> a.split()

['Life', 'is', 'too', 'short']

>>> b = "a:b:c:d

>>> b/split(':')

['a','b','c','d']

 

 

 

'Language > Python' 카테고리의 다른 글

점프 투 파이썬 - 딕셔너리 자료형★  (0) 2019.07.08
점프 투 파이썬 - 튜플 자료형  (0) 2019.07.08
점프 투 파이썬 - 리스트 자료형  (0) 2019.07.06
python / 문법  (0) 2019.06.27
no module named win32api 오류  (0) 2018.07.03

댓글

💲 추천 글