본문 바로가기
Python/파이썬 기초

문자열형(string)과 관련 함수/메서드 - 파이썬 기초(5)

by 콩돌 2018. 11. 12.
반응형


참고 자료

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


  ○ 이 외에 문자열을 검사하거나 수정하는 다양한 메서드도 존재한다.
    ▷ 예를들어 문자열에 숫자만 있거나 알파벳만 있거나 확인하는 메서드가 존재한다.
    ▷ 알파벳의 일부를 소문자나 대문자로 변경 시켜주는 메서드도 존재한다.
    ▷ 문자열을 정렬시켜주는 것 역시 메서드로 가능하다.
    ▷ 기타 다양한 문자열 메서드를 확인하고 싶다면 참고자료링크를 참고하면 된다.


반응형

댓글