Language/Python

[02-3] Python - 문자열 (Strings)

TechNote.kr 2016. 8. 8. 11:27

Python 문자열(String)은 숫자와 더불어 가장 많이 쓰이는 자료형 중에 하나이다.



  1. 문자열 표현
  2. 문자열 접근
  3. 문자열 수정
  4. 문자열 자르기 - split()
  5. 문자열 양옆 공란 지우기 - strip(), lstrip(), rstrip()
  6. 문자열 합치기/반복하기 (concatenate/repeat)
  7. 문자열 찾기 - find(), index()
  8. 문자열 바꾸기 - replace()
  9. 문자열 대/소문자 바꾸기 - upper(), lower()
  10. 문자열 연결하기 - join()
  11. 문자열 갯수 세기 - count()

 



1. 문자열 표현


 문자열은 큰 따옴표 " "나 작은 따옴표 ' ' 로 표현이 가능하고 예시는 다음과 같다.

>>> str1 = "I am string."
>>> type(str1)
<type 'str'>
>>> str2 = 'I am string, too'
>>> type(str2)
<type 'str'>

문자열은 따옴표로 둘러 쌓여 있기 때문에 123은 숫자형으로 인지되고, "123"은 문자열로 인지된다고 생각하면 된다.

>>> variable1 = 123
>>> type(variable1)
<type 'int'>
>>> variable2 = "123"
>>> type(variable2)
<type 'str'>



2. 문자열 접근


 python에서는 C와는 다르게 character 형이 존재하지 않고, 1글자 크기의 문자열로 다루어진다. 따라서 문자열내의 특정 문자에 접근하려면 하나의 문자로써 접근하는 것이 아니라 1글자 크기의 문자열로 접근하게 된다. 

그리고 문자열은 인덱스를 통해 원하는 부분만 접근이 가능하다.

>>> str3 = "Sample String"
>>> print str3[3]
p
>>> print str3[4:]
le String
>>> print str3[-3]
i
>>> print str3[1:3]
am



3. 문자열 수정


 문자열은 부분적으로 수정이 불가능하다. 따라서 문자열 내용에 수정이 필요하다고 한다면 새롭게 문자열을 생성하는 수 밖에 없다.

>>> str1 = "Sample Test"
>>> str1[0] = "A"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> str1 = "A" + str1[1:]
>>> print str1
Aample Test



4. 문자열 자르기 - split()


>>> str4 = "ABCDEFG"
>>> splited = str4.split('D')
>>> print splited
['ABC', 'EFG']
>>> type(splited)
<type 'list'>

split() 함수를 통해서는 delimiter (구분자)를 설정하면 구분자를 기준으로 문자열 자르기가 가능하다. 잘라진 문자열은 list 형식으로 나뉘어 표현된다. 

>>> str4 = "ABCDEFG" >>> splited = str4.split('DE') >>> print splited ['ABC', 'FG']

구분자는 하나의 문자로도 가능하지만 위와 같이 문자열로도 설정이 가능하다. 




5. 문자열 양옆 공란 지우기 - strip()


>>> str5 = " ABCDE"
>>> str5.strip()
'ABCDE'
>>> str6 = "ABCDE "
>>> str6.strip()
'ABCDE'
>>> str7 = " ABCDE "
>>> str7.strip()
'ABCDE'
>>> str8 = "ABCDE\n"
>>> str8.strip()
'ABCDE'
>>> str9 = "\r\nABCDE"
>>> str9.strip()
'ABCDE'

 주어진 문자열의 처음과 끝에 존재하는 공백(whitespace)이나 개행문자(\r\n)는 strip() 함수를 통해 제거 가능하다. 


>>> str6 = "ABC DE"
>>> str6.strip()
'ABC DE'
>>> str7 = "ABC\r\nDE"
>>> str7.strip()
'ABC\r\nDE'

 반면 문자열 중간에 존재하는 공백이나 개행문자는 strip() 함수를 통해 제거가 불가능하다. 이럴 때는 '8. 문자열 바꾸기'에 언급된 replace(" ","") 혹은 replace("\r\n", "") 등을 이용해서 해당 부분을 제거할 수 있다. 


 위와 같이 strip()을 통해 양 옆의 공백이나 개행문자를 모두 없앨 수도 있지만 아래와 같이 lstrip() 이나 rstrip()을 이용해 한쪽 부분만 제거할 수도 있다. 

>>> str8 = " ABCDE "
>>> str8.lstrip()
'ABCDE '
>>> str8.rstrip()
' ABCDE'




6. 문자열 합치기/반복하기


 Python 에서 문자열은 사칙연산자 중 더하기(+)와 곱하기(*)를 통해 문자열을 합치거나 반복할 수 있다. 


[문자열 합치기]
>>> str8 = "12345"
>>> str9 = "ABCDE"
>>> str10 = str8 + str9
>>> print str10
12345ABCDE

위의 예와 같이 두 문자열이 있을 때 더하기 연산자 (+) 를 사용하면 하나의 문자열로 합칠 수 가 있다. 


[문자열 반복하기]
>>> str8 = "12345"
>>> str10 = str8 * 2
>>> print str10
1234512345

반면 곱하기 연산자 (*) 를 사용하면 문자열을 원하는 만큼 반복할 수가 있다. 




7. 문자열 찾기


 문자열(String)내에서 부분 문자열(subString)이 존재하는지 존재한다면 그 위치는 어디부터 시작하는지 알 수 있다. 

>>> str11 = "ABCDEFG HIJKLMNE"
>>> str11.find('E')
4
>>> str11.find('e')
-1
>>> str11.find('BCD')
1

 문자열의 위치는 0부터 시작한다. 따라서 위의 예의 경우 "E"는 5번째 있기 때문에 그 위치는 4로 표시된다. 만약 2개 이상 있더라도 최초의 위치만 보여준다. 


 반면 "e"와 같이 문자열 내에 존재하지 않는 경우 -1 를 출력한다. 앞서 언급하기도 하였지만 python에는 문자라는 개념이 없다. 따라서 "E"도 문자열이고, "BCD"도 문자열이다. "BCD"를 find()할 경우 1을 출력한다. 


>>> str11 = "ABCDEFG HIJKLMN"
>>> str11.index('E')
4
>>> str11.index('e')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found
>>> str11.index('BCD')
1
 문자열을 찾기 위해 find()를 사용하기도 하지만 index()를 사용하기도 한다. find()와 index()의 차이는 찾는 문자열이 없을 경우 find()는 -1 를 돌려주는 반면, index()는 "substring not found" error를 반환하게 된다.

 



8. 문자열 바꾸기


 python에서 문자열을 바꾸기 위해서는 replace()를 사용한다. 

>>> str12 = "I am a boy"
>>> str12.replace("boy","girl")
'I am a girl'
>>> str12.replace(" ","")
'Iamaboy'
>>> str12.replace("are","is")
'I am a boy'

 위의 예와 같이 replace()를 이용하여 특정 문자열을 원하는 문자열로 교체도 가능하고, ""를 이용해서 삭제 또한 가능하다. 만약 존재하지 않는 문자열을 교체하려고 하였을 경우는 교체할 문자열이 없기 때문에 원래 문자열 그대로를 보여주게 된다.




9. 문자열 대/소문자 바꾸기


 upper() 를 이용해서 문자열 전체를 일괄적으로 대문자로 바꿀 수도 있고, lower() 를 이용해서 문자열 전체를 일괄적으로 소문자로 바꿀 수도 있다.  

>>> str13 = "aBcDeFg"
>>> str13.upper()
'ABCDEFG'
>>> str13.lower()
'abcdefg'




10. 문자열 연결하기


 sequence로 표현되는 자료형에 원하는 문자열을 사이사이에 넣어 하나의 문자열을 만들 수 있다. 여기서 sequence로 표현되는 자료형으로 튜플, 리스트, 문자열 등을 들 수 있다. 

>>> seq_tuple = ("ABC","BCD","CDE")
>>> s.join(seq_tuple)
'ABC---BCD---CDE'
>>> seq_list = ["ABC","BCD","CDE"]
>>> s.join(seq_list)
'ABC---BCD---CDE'
>>> seq_string = "ABCDE"
>>> s.join(seq_string)
'A---B---C---D---E'

 위와 같이 연달아 나열되는 sequence 자료형 사이사이에 자신이 원하는 문자열을 넣어 하나의 문자열로 표현이 가능하다. 




11. 문자열 갯수 세기


 기준이 되는 문자열 내에 확인을 원하는 문자열이 몇개 들어 있는지 count()를 통해 셀 수 있다. 

>>> str14 = "ABCdef efg"
>>> str14.count('e')
2
>>> str14.count('Cde')
1
>>> str14.count('ef')
2