• 2020. 6. 8.

    by. 윈썸지니

    반응형

    출처: pixabay

     

    문자열 다루기 2탄 입니다. 지난번 문자열 1탄으로 문자열 나누기, 대소문자 변환, 정렬하기 등에 대해 다루었습니다.

    이번 포스팅은 문자열 세기, 찾기, 포맷팅에 대해 다룹니다

     

    ● 문자열 문자 개수

     

    문자열 중에 특정 문자를 포함하는 개수를 구합니다.

    문자는 대소문자를 구분하여 정확한 개수를 반환합니다.

    참고로 전체 문자열 길이를 알고 싶으면 len() 이란 함수를 사용하면 됩니다.

    >>> x = "Hello World“
    ### ‘ㅣ’ 이 3개 있으므로 3을 돌려줍니다.
    >>> x.count('l')
    3
    >>> x.count('o’)
    2
    #### 대소문자를 구분합니다.
    >>> x.count('h')
    0
    >>> x.count('H’)
    1
    ### 문자열도 가능합니다.
    >>> x.count('He’)
    1
    ### 문자열 길이를 구합니다.
    >>> len(x)
    11
    >>>

     

    문자열 찾기

    특정 문자열을 찾는 메소드들을 소개합니다.

    startswith() : 특정 문자로 시작하는지를 True, False 로 반환해 줍니다.

    endswith() : 특정 문자로 시작하는지를 True, False 로 반환해 줍니다.

    find() : 특정 문자의 시작 위치를 인덱스 숫자로 반환해 줍니다.

    rfind() : find() 는 왼쪽 부터 , rfind() 는 오른쪽 부터 찾아 위치를 반환해 줍니다.

    Index() : 특정 문자의 시작 위치를 인덱스 숫자로 반환해 줍니다.

    rindex() : rindex() 는 왼쪽 부터 , rfind() 는 오른쪽 부터 찾아 위치를 반환해 줍니다

    >>> x = "0123456789"
    >>> y = "가나다라마바사“
    ### X 변수가 ‘012’로 시작을 하므로 True 를 반환합니다.
    >>> x.startswith('012')
    True
    ### X 변수가 ‘012’로 시작을 하지 않으므로 False 를 반환합니다.
    >>> x.startswith('123')
    False
    ### y 변수가 ‘가’로 시작을 하므로 True 를 반환합니다.
    >>> y.startswith('가')
    True
    ### startswith( ‘문자‘, 시작 인덱스 ) 형식으로 3부터 시작이므로 True를 반환합니다.
    >>> y.startswith('라', 3)
    True
    ### startswith( ‘문자‘, 시작 인덱스 ) 형식으로 0부터 시작이므로 False를 반환합니다.
    >>> y.startswith('라')
    False
    >>>

     

    endswith(‘문자’, 시작인덱스, 끝인덱스) : 끝 인덱스 값은 찾을 문자 보다 하나 더 많아야 합니다.

    >>> x = "0123456789"
    >>> y = "가나다라마바사"
    >>> x.endswith('9')
    True
    >>> x.endswith( '4', 0, 4)
    False
    >>> x.endswith( '4', 0, 5)
    True
    >>> y.endswith('사')
    True
    >>> y.endswith('라', 1, 5)
    False
    >>> y.endswith('라', 1, 4)
    True
    >>>

     

    find ( 문자’, 시작 위치 )

    찾을 문자를 입력하면 찾아진 인덱스의 첫자리를 반환해 줍니다. 값이 없으면 -1 반환합니다.

    인덱스는 0 부터 시작한다는 사실 잊지 않으셨죠?

    >>> x = "0123456789"
    >>> y = "가나다라마바사"
    >>> y.find('라')
    3
    >>> x.find('5')
    5
    >>> x.find('5', 7)
    -1
    >>> y.find('타')
    -1
    #####
    ### ‘56’이 5 부터 시작하므로 시작 인덱스 값을 반환합니다.
    >>> x.find('56’)
    5
    ### ‘1’이 있지만 시작이 4 부터 시작이므로 없다고 반환해 줍니다.
    >>> >>> x.find('1’, 4)
    -1
    ### ‘다가’ ‘다’ 와 ‘가’ 는 있지만 연속적으로 ‘다가‘는 없으므로 -1을 반환합니다.
    >>>>>> y.find('다가')
    -1

     

    rfind ( 문자’, 시작 위치, 끝의 위치)

    문자열의 끝에서 부터 찾아 처음 일치 하는 값을 반환 합니다.

    아래 findrfind 를 비교해 보았습니다. rfind는 특정 문자가 문자열 중 마지막 일치 하는 위치를 찾고자 할 때 유용합니다.

    >>> x = "ab ab ab"

    ### ‘ab ab ab’ 중 붉은 색 글자의 ‘a’ 를 찾음
    >>> x.find('a')
    0
    ### ‘ab ab ab’ 중 붉은 색 글자의 ‘a’ 를 찾음
    >>> x.rfind('a')
    6
    ### ‘ab ab ab’ 중 붉은 색 글자의 ‘a’ 를 찾음
    >>> x.rfind('a', 5)
    6
    ### ‘ab ab ab’ 중 붉은 색 글자의 ‘a’ 를 찾음
    >>> x.find( 'a', 0, 5 )
    0
    ### ‘ab ab ab’ 중 붉은 색 글자의 ‘a’ 를 찾음
    >>> x.rfind( 'a', 0, 5 )
    3

     

    문자 또는 문자열을 찾고자 할 경우 index() 라는 메소드도 있습니다.

    Index() 의 경우 find() 와 같은 역할을 합니다. 쓰임새도 같습니다.

    그런데 다른 한가지는 찾고자 하는 문자 또는 문자열이 없을 경우 find() -1을 반환하고 index() 는 오류를 발생 시킵니다.

    >>> x = "ab ab ab“
    >>> x.index('a', 3, 5)
    3
    >>> x.index('a', 3, 6)
    3
    >>> x.rindex('a', 3, 6)
    3
    >>> x.rindex('a', 3, 8 )
    6
    >>> x.index('a', 3, 8 )
    3
    >>>
    >>> x.find('a', 3, 8)
    3
    >>> x.index('aa')
    Traceback (most recent call last):
    File "", line 1, in
    x.index('aa')
    ValueError: substring not found
    >>> >>> x.find('aa')
    -1

    위의 메소드도 제법 많이 사용 됩니다.

    예를 들면 .xlsx 로 끝나는 파일 만 열어서 작업을 하는 프로그램이 있다고 가정하면 endswith()를 사용하여 파일을 찾는데 사용 할 것입니다.

    또한 문자열 중에 특정한 문자를 찾는 find 도 많이 사용 됩니다.

     

    문자열 포맷팅에 관해 이번 포스팅에서 작성 하려 했지만 양이 좀 많아서 나누어 작성합니다.

    다음 포스팅은 문자열 포맷 이란 주제로 포스팅 예정입니다.

    반응형