참고 자료
https://docs.python.org/3/library/stdtypes.html
파이썬 버전 3.7 기준
파이썬 자료형 및 연산자(4)
문자열형 (str, String, 텍스트시퀀스)
문자열형은 시퀀스형의 한 형태이다.시퀀스형의 자료형은 무언가의 조합으로 이루어진 자료형이라고 생각하면 편하다.
시퀀스형에는 3가지의 기본 시퀀스형(리스트, 튜플, 레인지)이 있다.
바이너리 데이터 및 텍스트 문자열 처리를 위한 시퀀스형들 역시 존재한다.
문자열형
○ 문자열형은 시퀀스형의 한 형태이다.
○ 줄여서 str라고도 표현한다.
○ 문자열형은 유니코드 코드포인트의 불변 시퀀스이다.
▷ s = 'good'일 때, s[1] = 's' 등으로 변환을 시도하면 에러가 발생한다.
▷ 문자열 메서드를 이용하면 수정이 가능하다.
○ 아래와 같은 다양한 방법으로 작성이 가능하다.
▷ 작은따옴표: ' "큰" 따옴표를 담을 수 있다.'
▷ 큰따옴표: " '작은' 따옴표를 담을 수 있다."
▷ 삼중 따옴표: ''' 세 개의 작은 따옴표도 가능하다.''', """ 세개의 큰 따옴표 역시 가능하다."""
- 삼중 따옴표로 묶인 문자열은 여러 줄로 쓰는 것이 가능하며, 연관된 모든 공백이 문자열에 포함된다.
- 닥스트링 작성에서 삼중따옴표를 사용하므로 사용할 때 주의가 필요하다.
○ 두개의 문자열 사이에 공백 밖에 없는 경우 단일 문자열로 변환된다.
▷ ("spam " "egg") == "spam eggs"
○ 문자열은 str() 생성자를 사용하여 다른 객체로부터 생성이 가능하다.
○ 지원되는 이스케이프 시퀀스와 대부분의 이스케이프 시퀀스 처리를 비활성화 하는 r("raw")접두어를 포함하여 문자열 리터럴에 대한 자세한 내용은 문자열과 바이트열 리터럴에서 설명되어있다.
○ 파이썬에는 문자(character)형의 데이터 타입이 없다. 따라서 1개의 문자를 생성할 경우 1개의 문자를 가진 문자열이 생성된다.
▷ 이런 경우, s[0] == s[0:1]이다.
○ 파이썬에서 가변문자열형은 없지만 문자열을 효율적으로 구성하는데 str.join()이나 io.Stringi0과 같은 기능을 사용할 수 있다.
○ 파이썬 3.3 이후에는 파이썬2와의 호환성을 위해 문자열 앞에 u를 붙이는 것이 허용된다.
▷ u'good' == 'good'
○ 순수하게 문자열을 표현해주고 싶은 경우 문자열 앞에 r을 붙여주면 된다.
▷ c:\dir1\name라는 문자열을 출력하고싶은 경우 'c:\dir1\name'를 사용하면 \n에 의해 행바꿈이 되어 원하는 결과를 얻지 못한다. 이런경우 r'c:\dir1\name'를 입력하면 'c:\dir1\name'라는 문자열을 출력할 수 있다.
사용 예)
In[2]: print('c:\dir1\name')
c:\dir1
ame
In[3]: print(r'c:\dir1\name')
c:\dir1\name
class str(object=''), str(object=b'', encoding='utf-8', errors='strict')
○ 삽입되는 오브젝트를 문자열로 변환한다.
○ 오브젝트가 삽입되지 않을경우 빈 문자열을 출력한다.
○ encoding과 errors 입력에 따라 str()의 동작은 달라진다.
○ encoding과 errors 모두 입력되지 않을경우, 오브젝트 자체를 문자열로 출력한다. (bytes 개체가 사용이 불가능하다.)
▷ str(b'good')은 "b'good'"을 출력한다.
○ encoding과 errors가 둘 중에 하나라도 입력될 경우 오브젝트는 bytes나 bytearray로 입력되어야 한다.
문자열 메서드
○ str.count(sub[, start[, end]])
▷ str에 들어가는 sub 문자(열)의 개수를 반환한다.
▷ start와 end는 슬라이스와 동일한 개념의 범위이며 생략이 가능하다.
○ str.find(sub[, start[, end]])
▷ str에 들어가는 sub 문자(열)의 인덱스를 반환한다.
▷ 같은 sub 문자(열)이 여러 개 일 경우 가장 낮은 인덱스 또는 가장 처음 등장하는 sub의 인덱스를 반환한다.
▷ 만약 못찾을 경우 -1을 반환한다.
▷ start와 end는 슬라이스와 동일한 개념의 범위이며 생략이 가능하다.
○ str.index(sub[, start[, end]])
▷ 위의 find 메서드와 비슷하지만 sub를 찾을 수 없는 경우 ValueError를 일으킨다.
▷ start와 end는 슬라이스와 동일한 개념의 범위이며 생략이 가능하다.
○ str.rfind(sub[, start[, end]])
▷ str에 들어가는 sub 문자(열)의 인덱스를 반환하나, str.find() 메서드와는 탐색 방향이 반대이다.
▷ 즉, 같은 sub 문자(열)이 여러 개 일 경우 가장 큰 인덱스 또는 가장 마지막에 등장하는 sub의 인덱스를 반환한다.
▷ 나머지 거동은 str.find()와 동일하다.
○ str.rindex(sub[, start[, end]])
▷ str.rfind()메서드와 마찬가지로 탐색 방향이 str.index()와 반대이다.
▷ 위의 rfind 메서드와 비슷하지만 sub를 찾을 수 없는 경우 ValueError를 일으킨다.
▷ 나머지 거동은 str.index()와 동일하다.
In[7]: 'a b c d e f g h i j k l m n o p'.find('q')
Out[7]: -1
In[8]: 'a b c d e f g h i j k l m n o p'.find('e')
Out[8]: 8
In[9]: 'a b c d e f g h i j k l m n o p'.index('f')
Out[9]: 10
○ str.join(iterable)
▷ iterable 문자(열)에 str을 삽입한 문자열을 출력한다.
▷ iterable에는 문자열로 이루어진 리스트나, 단순 문자열 입력이 가능하며, 출력되는 결과는 조금 다르다.
join의 출력예)
In[26]: ' '.join('g' 'k')
Out[26]: 'g k'
In[27]: ' '.join('gk')
Out[27]: 'g k'
In[28]: ' '.join('gkg')
Out[28]: 'g k g'
In[29]: ' '.join(['gkg','gdg'])
Out[29]: 'gkg gdg'
○ str.replace(old, new[ count])
▷ str 문자열에서 old를 new로 바꿔주는 메서드이다.
▷ count를 입력하면 앞에 count 수만큼만 변경을 수행한다.
○ str.lstrip([chars])
▷ 선행 문자가 제거된 문자열을 출력한다.
▷ chars는 제거할 문자의 집합을 나타내며, 기본값은 공백이다.
○ str.rstrip([chars])
▷ 후행 문자가 제거된 문자열을 출력한다.
▷ 방향이 str.lstrip()과 반대인 것을 제외하면 거동은 동일하다.
○ str.strip([chars])
▷ 선행 문자, 후행문자 둘 다 제거된 문자열을 출력한다.
▷ chars는 제거할 문자의 집합을 나타내며, 기본값은 공백이다.
메서드 사용예)
In[2]: 'Python is fun'.replace('fun', 'easy')
Out[2]: 'Python is easy'
In[3]: ' Bravo, my life '.strip()
Out[3]: 'Bravo, my life'
In[4]: 'https://www.kongdols-room.tistory.com/'.lstrip('htps:/w')
Out[4]: '.kongdols-room.tistory.com/'
○ str.split(sep=None, maxsplit=-1)
▷ sep에 입력된 문자(열)을 이용하여 str 문자열을 분리시킨 리스트를 출력한다.
▷ maxsplit 을 입력하면 문자열을 분리하는 최대 횟수를 제한한다.
▷ sep을 입력하지 않거나None을 입력하면 다른 분할 알고리즘을 적용하는데, 연속된 공백문자를 단일 구분자로 간주하고, 문자열에 선행이나 후행공백을 포함되더라도 이를 무시하고 리스트에 포함시키지 않는다.
○ str.rsplit(sep=None, maxsplit=-1)
▷ str.split()과 동일한 작업을 수행하나, 시작 방향이 오른쪽이라는 것이 다르다.
○ str.splitlines([keepends])
▷ str.splitlines는 줄경계에서 리스트를 나눈다.
▷ keepend= True 일 경우 줄경계 사인을 지우지 않고 남겨놓은 상태에서 리스트를 작성한다.
메서드 사용 예)
In[5]: 'a,b,c,d,e,f,g,h'.split(',')
Out[5]: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
In[6]: 'a b c d e f g h i k k '.split()
Out[6]: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k', 'k']
○ 이 외에 문자열을 검사하거나 수정하는 다양한 메서드도 존재한다.
▷ 예를들어 문자열에 숫자만 있거나 알파벳만 있거나 확인하는 메서드가 존재한다.
▷ 알파벳의 일부를 소문자나 대문자로 변경 시켜주는 메서드도 존재한다.
▷ 문자열을 정렬시켜주는 것 역시 메서드로 가능하다.
▷ 기타 다양한 문자열 메서드를 확인하고 싶다면 참고자료링크를 참고하면 된다.
댓글