728x90

이번 시간에는 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' 으로 교체 
>>> "I \"love\" this exercise"    # double quatation " 을 그대로 찍고 싶을 때
'I "love" this exercise'
>>> a                 # a 변수에 담긴 값을 찍음 (또는 print a)
"isn't"
>>> len(a)          # a 변수에 담긴 문자열의 길이 (내장함수 len 사용)
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 를 이용해 찾아봐도 됩니다.

>>> a.upper()     # string a 를 모두 대문자로
'HELLO'
>>> a.find('e')    # e 문자가 몇번째에 나오는가 ?
1
>>> a.count('H')  # H 문자가 몇번 나오는가?
1

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

>>> a
'Hello'
>>> a[0]      # a 문자열의 첫번째 문자
'H'
>>> a[1]      # a 문자열의 두번째 문자
'e'
>>> a[100]   # a 문자열의 두번째 문자 -> out of range
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'
>>> a[1:3]  # 3 은 미포함
'el'
>>> a[1:5]  # 5 는 미포함으로 4 까지이므로 마지막 문자까지임
'ello'
>>> a[1:]   # 마지막 문자까지
'ello'
>>> a[:]    # 모든 문자 표시
'Hello'
>>> a[:2]   # 처음 문자부터 1 번까지 (2는 미포함)
'He'

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

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

>>> a[-5:]     # 끝에서 5 번째 문자부터 뒤로 쭈욱~
'Hello'
>>> a[-4:-2]  # 끝에서 4 번째 문자부터 끝에서(2+1)번째 문자까지 (-2 는 미포함이므로)
'el'
>>> a[:-3]     # 처음부터 끝에서 (3+1)번째 문자까지 (-3 은 미포함이므로)
'He'

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

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

 

출처 : http://cloudrain21.tistory.com/entry/파이썬python-문자열string-다루기

728x90

'Python' 카테고리의 다른 글

python list2  (0) 2014.05.02
python list  (0) 2014.05.02
python import, 들여쓰기  (0) 2014.05.02
python interpreter  (0) 2014.05.02
python 언어란  (0) 2014.05.02

+ Recent posts