파이썬(python) – 문자열(string) 다루기

이번 시간에는 python 에서 string 을 다루는 다양한 방법을 공부해 보겠습니다.
python 에서 string 을 잘 다루려면 string 을 하나의 객체로 보시면 되겠습니다.
c++ 이나 java 를 사용하여 객체지향 프로그래밍을 해보신 분이면 아주 쉽게 이해가 될 것이고, 그런 경험이 없어도 이해하는데는 어렵지 않습니다.

아래 제가 python interpreter 상에서 수행하는 한라인 한라인에 기록해둔 주석을 잘 읽어보시기 바랍니다.

sh> python
Python 2.7.2+ (default, Oct  4 2011, 20:06:09)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>>

# a 라는 객체 변수에 'Hello' 라는 문자열을 대입
>>> a = 'Hello'    

# a 라는 객체 변수에 대입된 문자열을 'isn't' 으로 교체
>>> a = "isn't"      

# double quatation " 을 그대로 찍고 싶을 때
>>> "I \"love\" this exercise"
'I "love" this exercise'

# a 변수에 담긴 값을 찍음 (또는 print a)
>>> a
"isn't"

# a 변수에 담긴 문자열의 길이 (내장함수 len 사용)
>>> len(a)
5

# 문자열 합침
>>> a + ' yay!'
"isn't yay!"

 위에서 + 연산을 했지만 원래 변수 a 에 들어있는 값은 변하지 않는다.
>>> a                

"isn't"
>>> 

위에서 a 를 string 객체로 이해하면 이 객체로 할 수 있는 일들이 아주 많습니다.
어떤 일들을 할 수 있는지 한번 볼까요 ?
어떤 모듈이 지원하는 함수나 symbol list 를 보고 싶을 때는 무엇을 이용한다고 했죠 ?
dir 입니다.  모듈 뿐 아니라 특정 객체의 symbol list 를 보고자할 때도 dir 을 사용할 수 있습니다.

>>> a = 'Hello'
>>> dir(a)

['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__',
'__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__',
'__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', '_formatter_field_name_split', '_formatter_parser',
'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs',
'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower',
'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip',
'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit',
'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase',
'title', 'translate', 'upper', 'zfill']

a 라고 제가 대충 'Hello' 를 대입해둔 변수하나가 이렇게 많은 일을 할 수 있는 엄청난 존재가 되어 있네요. @@
위에서 보여주는 몇개 함수를 간단히 사용해볼까요 ?
나머지는 여러분이 몇개 더 수행해보세요.
객체나 모듈에서 지원하는 함수 이름들을 많이 알아둘수록 개발할 때 바로바로 생각나서 편하게 이용할 수 있겠죠 ?  뭐 주요한 몇개 정도만 알아두고 나머지는 필요할 때 dir / help 를 이용해 찾아봐도 됩니다.

# string a 를 모두 대문자로
>>> a.upper()     
'HELLO'

# e 문자가 몇번째에 나오는가 ?
>>> a.find('e')    
1

# H 문자가 몇번 나오는가?
>>> a.count('H')
1

string 의 각 문자들은 다음과 같이 array 문자열로 접근하면 됩니다.

>>> a
'Hello'

# a 문자열의 첫번째 문자
>>> a[0]
'H'

# a 문자열의 두번째 문자
>>> a[1]
'e'

# a 문자열의 99 번째 문자 -> out of range
>>> a[100]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

우리가 c 에서 printf 를 이용해 standard out 으로 무언가를 찍어보고 싶을 때 어떻게 하나요 ?

printf("%s is a %d th man\n", "dplee", 5);

위와 같이 %s, %d 등을 이용하여 format string 을 구성합니다. 변수값이나 상수값을 받아서 이를 확정된 string 으로 만들어낸 후 화면에 출력하게 되죠.
python 에서는 아래와 같이 사용하면 됩니다. c 에서 사용하는 방법과 아주 유사하지만 사용방법만 약간 다릅니다.

>>> 'Hi %s I have %d donuts' % ('Alice', 42)
'Hi Alice I have 42 donuts'

이번에는 string 에서 일부 문자들만 선별해서 뽑아내는 방법을 알아볼까요 ?

H  e  l   l  o
0  1  2  3  4

'Hello' 라는 문자열을 구성하는 각각의 문자는 위에 붙인 숫자로 표현될 수 있습니다. array 의 index 번호와 같죠. 그럼 위의 문자열 중에서 두번째문자부터 마지막문자까지 추출하려면 어떻게 할까요 ?
첫번째부터 세번째까지는 ?
아래의 사용방법을 보시면 이해가 되실겁니다.

>>> a
'Hello'

# 3 은 미포함
>>> a[1:3]  
'el'

# 5 는 미포함으로 4 까지이므로 마지막 문자까지임
>>> a[1:5]
'ello'

# 마지막 문자까지
>>> a[1:]   
'ello'

# 모든 문자 표시
>>> a[:]    
'Hello'

# 처음 문자부터 1 번까지 (2는 미포함)
>>> a[:2]
'He'

그럼 아래와 같이 접근할 수도 있지 않을까요 ? 끝에서부터 접근하는 방법입니다.

H   e   l    l    o
-5  -4  -3  -2  -1

# 끝에서 5 번째 문자부터 뒤로 쭈욱~
>>> a[-5:]     
'Hello'

# 끝에서 4 번째 문자부터 끝에서(2+1)번째 문자까지 (-2 는 미포함이므로)
>>> a[-4:-2]
'el'

# 처음부터 끝에서 (3+1)번째 문자까지 (-3 은 미포함이므로)
>>> a[:-3]     
'He'

앞에서부터 따질때는 0 부터이고 뒤에서부터 따질 때는 -1 부터이군요. 이것만 주의하면 되겠네요. ^^

자... 여기까지 string 을 다루는 법을 배워보았습니다.
참 쉽고 편하죠잉~

다음 시간부터는 python 핵심 내용 중의 하나인 List, Sorting, Tuple 에 대해 차근차근 공부해 보겠습니다.

You may also like...

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x