본문 바로가기
Python 코딩도장

파이썬 코딩도장 Unit 24 정리(1) - 문자열 조작

by chanfficial 2022. 1. 28.

Unit 24

문자열 응용하기

 

 

1. 문자열 조작하기

1-1. 문자열 바꾸기

  • replace('바꿀문자열', '새문자열')문자열 안의 문자열을 다른 문자열로 바꿔준다.(문자열 자체는 변경하지 않고 바뀐 결과만 반환)
    >>> 'Hello, world!'.replace('world', 'Python')
    'Hello, Python!'​
  • 만약 바뀐 결과를 유지하고 싶다면 문자열이 저장된 변수에 replace를 사용한 뒤, 다시 변수에 할당해주면 된다.
    >>> s = 'Hello, world!'
    >>> s = s.replace('world!', 'Python') # replace로 변수에 할당
    >>> s
    'Hello, Python'​

1-2. 문자 바꾸기

  • translate문자열 안의 문자를 다른 문자로 바꿔준다.
    1. 먼저 str.maketrans('바꿀문자', '새문자')로 변환 테이블을 만든다.
    2. translate(테이블)을 사용하면 문자를 바꾼 뒤 결과를 반환한다.
  • >>> table = str.maketrans('aeiou', '12345')
    >>> 'apple'.translate(table)
    '1ppl2'​
    - 문자열 'apple'에서 a → 1, e → 2, i → 3, o → 4, u → 5 로 바꿔주었다.

 

 

 

1-3. 문자열 분리하기

  • split()공백을 기준으로 문자열을 분리하여 리스트로 만들어준다. → 지금까지 input으로 문자열을 입력받은 뒤 리스트로 만든 메서드가 바로 이 split이다.
    >>> 'apple pear grape pineapple orange'.split()
    ['apple', 'pear', 'grape', 'pineapple', 'orange']​
  • split('기준문자열') 과 같이 기준 문자열을 지정하면 기준 문자열로 문자열을 분리한다.
    >>> 'apple, pear, grape, pineapple, orange'.split(', ')
    ['apple', 'pear', 'grape', 'pineapple', 'orange']​
    - ', ' 로 문자열을 분리하여 각 단어만 리스트로 만들었다.

 

 

1-4. 구분자 문자열과 문자열 리스트 연결하기

  • join(리스트)구분자 문자열과 문자열 리스트의 요소를 연결하여 문자열로 만들어 준다.
    >>> ' '.join(['apple', 'pear', 'grape', 'pineapple', 'orange'])
    'apple pear grape pineapple orange'​
    - ' '(공백) 에 join을 사용하여 각 문자열 사이에 공백이 들어가도록 연결했다.- '-'(마이너스) 에 join을 사용하여 각 문자열 사이에 마이너스가 들어가도록 연결했다.
  • >>> '-'.join(['apple', 'pear', 'grape', 'pineapple', 'orange']) 'apple-pear-grape-pineapple-orange'​

 

 

1-5. 소문자 ↔ 대문자로 바꾸기

  • upper()문자열의 문자를 모두 대문자로 바꿔주는데, 만약 문자열 안에 대문자가 있다면 그 문자는 그대로 유지된다.
    >>> 'python'.upper()
    'PYTHON'​
  • lower()문자열의 문자를 모두 소문자로 바꿔주는데, 만약 문자열 안에 소문자가 있다면 그대로 유지된다.
    >>> 'PYTHON'.lower()
    'python'​

 

 

1-7. 공백 삭제하기

  • lstrip()은 문자열에서 왼쪽에 있는 연속된 모든 공백을 삭제한다.( l 은 left를 의미)
    >>> '   Python   '.lstrip()
    'Python   '​
  • rstrip()은 문자열에서 오른쪽에 있는 연속된 모든 공백을 삭제한다.(r 은 right를 의미)
    >>> '   Python   '.rstrip()
    '   Python'​
  • strip()은 문자열에서 양쪽에 있는 연속된 모든 공백을 삭제한다.
    >>> '   Python   '.rstrip()
    '   Python'​

 

1-8. 특정 문자 삭제하기

  • lstrip('삭제할문자들')처럼 삭제할 문자들을 문자열 형태로 넣어주면, 문자열 왼쪽에 있는 해당 문자를 삭제한다.
    >>> ', python.'.lstrip(',.')
    ' python.'​
    - 문자열 왼쪽의 ,(콤마)와 .(점)을 삭제하는데, 공백을 넣지 않았으므로 공백은 그대로 둔다.
  • rstrip('삭제할문자들')처럼 삭제할 문자들을 문자열 형태로 넣어주면, 문자열 오른쪽에 있는 해당 문자를 삭제한다.
    >>> ', python.'.rstrip(',.')
    ', python'​
    - 문자열 오른쪽의 ,(콤마)와 .(점)을 삭제하는데, 공백을 넣지 않았으므로 공백은 그대로 둔다.
  • strip('삭제할문자들')처럼 삭제할 문자들을 문자열 형태로 넣어주면 문자열 양쪽에 있는 해당 문자를 삭제한다.
    >>> ', python.'.strip(',.')
    ' python'​
    - 문자열 양쪽의 ,(콤마)와 .(점)을 삭제하는데, 공백을 넣지 않았으므로 공백은 그대로 둔다

 

 

※ 구두점을 간단하게 삭제하기

  • string 모듈의 punctuation에는 모든 구두점이 들어있는데, strip 메서드에 string.punctuation을 넣으면 문자열 양쪽의 모든 구두점을 간단하게 삭제할 수 있다.
    >>> import string
    >>> ', python.'.strip(string.punctuation)
    ' python'
    >>> string.punctuation
    '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'​
  • 만약 공백까지 삭제하고 싶다면 string.punctuation에 공백 ' '을 연결해서 넣어줘도 되고
    >>> ', python.'.strip(string.punctuation + ' ')
    'python'​
  • 메서드 체이닝을 활용해도 된다.
    >>> ', python.'.strip(string.punctuation).strip()
    'python'​

 

1-9. 문자열을 정렬하기

  • ljust(길이)문자열을 지정된 길이로 만든 뒤 왼쪽으로 정렬하고 남는 공간은 공백으로 채운다.
    >>> 'python'.ljust(10)
    'python    '​
    - 'python'의 길이를 10으로 만든 뒤 왼쪽으로 정렬하고 남는 공간을 공백 4칸으로 채웟다.
  • rjust(길이)문자열을 지정된 길이로 만든 뒤 오른쪽으로 정렬하고 남는 공간은 공백으로 채운다.
    >>> 'python'.rjust(10)
    '    python'​
     - 'python'의 길이를 10으로 만든 뒤 오른쪽으로 정렬하고 남는 공간을 공백 4칸으로 채웠다.
  • center(길이)문자열을 지정된 길이로 만든 뒤 가운데로 정렬하고 남는 공간을 공백으로 채운다.
    >>> 'python'.center(10)
    '  python  '​
    - 'python'의 길이를 10으로 만든 뒤 가운데로 정렬하고 양 옆의 남는 공간을 공백 2칸씩 채웠다.
  • 만약 가운데로 정렬했을 때, 전체 길이와 남는 공간이 모두 홀수가 된다면 왼쪽에 공백이 한 칸 더 들어간다.
    >>> 'python'.center(11)
    '   python  '​
    - 길이가 6인 'python'을 11칸으로 가운데 정렬하면 5칸이 남아서 왼쪽에 공백 3칸, 오른쪽에 공백 2칸이 들어간다.

 

 

1-10. 메서드 체이닝(method chaining)

  • 문자열 메서드는 처리한 결과를 반환하도록 만들어져 있기 때문에, 메서드를 계속 연결해서 호출하는 메서드 체이닝이 가능하다.
    # 문자열을 오른쪽으로 정렬한 뒤 대문자로 바꾼다
    >>> 'python'.rjust(10).upper()
    '    PYTHON'​
    - 문자열을 입력받을 때 자주 사용했던 input().split()도 input()이 반환한 문자열에 split을 호출하는 메서드 체이닝이다.

 

 

1-11. 문자열 왼쪽에 0 채우기

  • zfill(길이)지정된 길이에 맞춰서 문자열의 왼쪽에 0을 채운다.(zero fill을 의미함)
  • 단, 문자열의 길이보다 지정된 길이가 작다면 아무것도 채우지 않는다.
  • 보통 zfill은 숫자를 일정 자릿수로 맞추고 앞자리는 0으로 채울 때 사용한다.
    >>> '35'.zfill(4)    # 숫자 앞에 0을 채움
    '0035'
    >>> '3.5'.zfill(6)   # 숫자 앞에 0을 채움
    '0003.5'
    >>> 'hello'.zfill(10)  # 문자열 앞에 0을 채울 수도 있음
    '00000hello'​

 

1-12. 문자열 위치 찾기 : find()

  • find('찾을문자열')은 문자열에서 특정 문자열을 찾아서 인덱스를 반환하고, 문자열이 없으면 -1을 반환한다.
  • find는 왼쪽에서부터 문자열을 찾는데, 같은 문자열이 여러 개일 경우 처음 찾은 문자열의 인덱스를 반환한다.
    >>> 'apple pineapple'.find('pl')
    2
    >>> 'apple pineapple'.find('xy')
    -1​
    - 'pl'이 2개 있지만 왼쪽에서 처음 찾은 'pl'의 인덱스 2를 반환한다.
  • rfind('찾을문자열')은 오른쪽에서부터 특정 문자열을 찾아서 인덱스를 반환하고, 문자열이 없으면 -1을 반환한다.
  • 같은 문자열이 여러 개일 경우 처음 찾은 문자열의 인덱스를 반환한다.
    >>> 'apple pineapple'.rfind('pl')
    12
    >>> 'apple pineapple'.rfind('xy')
    -1​
    - 'pl'이 2개 있지만 오른쪽에서 처음 찾은 'pl'의 인덱스 12를 반환한다.

 

 

1-13. 문자열 위치 찾기 : index()

  • index('찾을문자열')왼쪽에서부터 특정 문자열을 찾아서 인덱스를 반환하는데, 문자열이 없으면 에러를 발생시킨다.
  • 같은 문자열이 여러 개일 경우 처음 찾은 문자열의 인덱스를 반환한다.
    >>> 'apple pineapple'.index('pl')
    2​
  • rindex('찾을문자열')오른쪽에서부터 특정 문자열을 찾아서 인덱스를 반환하고, 문자열이 없으면 에러를 발생시킨다.
  • 같은 문자열이 여러 개일 경우 처음 찾은 문자열의 인덱스를 반환한다.
    >>> 'apple pineapple'.rindex('pl')
    12​

    ※ find()와 index()의 차이점
      find() index()
    찾으려 하는 특정 문자열이 없을 때 -1을 반환 에러 발생

 

1-14. 문자열 개수 세기

  • count('문자열')은 현재 문자열에서 특정 문자열이 몇 번 나오는지 알아낼 수 있다.
    >>> 'apple pineapple'.count('pl')
    2​
    - 'pl'이 2번 나오므로 2가 반환된다.