파이썬 | 문자열 응용하기

CHOI·2021년 11월 9일
0

Python

목록 보기
17/33
post-thumbnail

1. 문자열 조작하기

문자열은 문자열을 조작하거 정보를 얻는 다양한 메서드(메서드는 나중에 뒤에서 설명)를 제공한다. 여기서는 자주 사용되는 메서드만 설명하겠다.

문자열 바꾸기 ( replace )

replace('바꿀문자열', '새문자열') 은 문자열을 바꿔준다. (문자열 자체는 변하지 않으며 바뀐 문자열을 반환한다). 다음 예시는 'World' 를 'Python'으로 바꾼 예시이다.

>>> 'Hello, world!'.replace('world', 'Python')
'Hello, Python!'

바뀐 결과를 유지하고 싶다면 변수에 할당해주면 된다.

>>> s = 'Hello, world!'
>>> s = s.replace('world!', 'Python')
>>> s
'Hello, Python'

문자 바꾸기 ( translate )

이번에는 문자열이 아닌 문자를 바꿔보자 translate 는 문자열 안에 문자를 다른 문자로 바꾼다.

먼저 str.maketrans('바꿀문자', '새문자') 로 변환 테이블을 만든다. 그 다음에 translate(table) 를 사용하면 문자를 바꾼뒤 결과를 반환한다.

>>> table = str.maketrans('abcde', '12345')
>>> 'ace'.translate(table)
'135'

위 예제는 'a', 'b', 'c', 'd', 'e' 문자들이 각각 '1', '2', '3', '4', '5' 로 바뀐다.

문자열 분리하기 ( split )

>>> 'apple, pear, grape, pineapple, orange'.split(', ')
['apple', 'pear', 'grape', 'pineapple', 'orange']

split() 를 하면 띄어쓰기 기준으로 분리된다.

split 에 대해서는 앞에서도 자주 사용했으니까 설명은 생략하겠다.

구분자로 구분된 문자열 리스트 연결하기

그러면 이번에는 반대로 분리된 문자열을 구분자로 연결하자

join(리스트) 는 구분자 문자열과 문자열 리스트의 요소를 연결하여 문자열로 만든다. 다음 예제는 문자열 리스트를 공백(' ')으로 연결하는 예제이다.

>>> ' '.join(['apple', 'pear', 'grape', 'pineapple', 'orange'])
'apple pear grape pineapple orange'

소문자 → 대문자 ( upper )

>>> 'python'.upper()
'PYTHON'

대문자 → 소문자 ( lower )

>>> 'PYTHON'.lower()
'python'

공백 삭제하기 ( strip )

왼쪽 공백 삭제하기 ( lstrip )

>>> '   Python   '.lstrip()
'Python   '

오른쪽 공백 삭제하기 ( rstrip )

>>> '   Python   '.rstrip()
'   Python'

양쪽 공백 삭제하기 ( strip )

>>> '   Python   '.strip()
'   Python'

특정 문자 삭제하기 ( strip )

문자열을 기준으로 왼쪽이나 오른쪽 또는 양쪽에 있는 특정 문자를 삭제한다.

왼쪽 특정 문자 삭제하기 ( lstrip )

>>> ', python.'.lstrip(',.')
' python.'

오른쪽 특정 문자 삭제하기 ( rstrip )

>>> ', python.'.rstrip(',.')
', python'

양쪽 특정 문자 삭제하기 ( strip )

>>> ', python.'.strip(',.')
' python'

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

string 모듈에 punctuation 에는 모든 구두점이 들어있다. 이를 활용하여 다음과 같이 stripstring.punctuation 을 넣으면 문자열 양쪽에 모든 구두점을 삭제할 수 있다.

>>> import string
>>> ', python.'.strip(string.punctuation)
' python'
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

만약 공백까지 삭제하고 싶다면 구두점 + '공백' 을 하면 된다.

>>> ', python.'.strip(string.punctuation + ' ')
'python'

문자열 왼쪽 정렬하기 ( ljust )

이번에는 문자열에 공백을 넣어서 원하는 위치에 정렬해보자

ljust 는 문자열의 길이를 지정하고 왼쪽 정렬하며 남은 공간을 공백으로 채운다.

>>> 'python'.ljust(10)
'python    '

Untitled

문자열 오른쪽 정렬하기 ( rjust )

>>> 'python'.rjust(10)
'    python'

Untitled

문자열 가운데 정렬하기 ( center )

>>> 'python'.center(10)
'  python  '

Untitled

만약 남은 공간이 위 예제 처럼 짝수로 딱 떨어지는 것이 아니라 홀수로 떨어진다면 공백은 왼쪽에 한 칸더 들어가게 된다. 예를 들어서 center(11) 을 한다면 왼쪽에 공백 3칸 오른쪽에 공백 2칸이 들어가게 된다.

>>> 'python'.center(11)
'   python  '

메서드 체이닝

문자열 메서드는 처리한 결과를 반환하도록 만들어졌다. 따라서 메서드를 계속 연결해서 호출하는 메서드 체이닝이 가능하다. 메서드를 줄줄이 연결한다고 하여 메서드 체이닝(method chaining) 이라고 부른다.

>>> 'python'.rjust(10).upper()
'    PYTHON'

사실 우리가 이전에 문자열을 입력 받았을 떄 사용했던 input().split() 도 메서드 체이닝이다.

문자열 왼쪽에 0 채우기 ( zfill )

지금까지는 문자열을 정렬하면서 남은 공간에 공백을 채웠다. 파이썬을 하다보면 문자열 왼쪽에 0을 채워야하는 경우가 생긴다. zfill(길이) 는 지정된 길이에 맞춰 문자열 왼쪽에 0을 채운다. 단 문자열의 길이보다 지정된 길이가 작다면 아무것도 채우지 않는다. 보통 zfill 은 숫자를 일정한 자릿수로 맞추고 앞자리는 0으로 채울 때 사용한다.

>>> '35'.zfill(4)        # 숫자 앞에 0을 채움
'0035'
>>> '3.5'.zfill(6)       # 숫자 앞에 0을 채움
'0003.5'
>>> 'hello'.zfill(10)    # 문자열 앞에 0을 채울 수도 있음
'00000hello'

문자열 위치 찾기 ( find )

문자열에서 특정 문자열을 찾아서 인덱스를 반환한다. 만약에 특정 문자열이 없으면 -1 을 반환한다.

>>> 'apple pineapple'.find('pl')
2
>>> 'apple pineapple'.find('xy')
-1

오른쪽에서부터 문자열 위치 찾기 ( rfind )

>>> 'apple pineapple'.rfind('pl')
12
>>> 'apple pineapple'.rfind('xy')
-1

문자열 개수 세기 ( count )

>>> 'apple pineapple'.count('pl')
2

2. 문자열 서식 지정자와 포매팅

예를 들어서 다음과 같이 학생 이름과 점수를 입력한다고 해보자.

철수의 점수는 85.3점입니다.

영희의 점수는 98.7점입니다.

위의 두 문자열에서 "의 점수는 ' . ' 점 입니다" 는 같지만 이름과 점수는 다르다. 이와 같이 문자열 내에서 특정 부분을 원하는 값으로 바꿀 때 서식 지정자 또는 포매팅을 사용한다.

서식 지정자로 문자열 넣기 (%s)

서식 지정자(format specifier) 를 활용하여 문자열을 넣어보자.

  • '%s' % '문자열'
>>> 'I am %s.' % 'james'
'I am james.'

서식 지정자는 % 로 시작하고 자료형을 뜻하는 문자가 붙는다. %s 에서 sstring 으로 문자열을 뜻한다. 그 뒤에 % 를 붙이고 'james' 를 지정하면 %s 자리에 'james' 가 들어가게 된다.

여기서 주의할 점은 중간에 % 는 따음표로 묶이면 안된다는 것이다.

물론 변수로도 넣을 수 있다.

>>> name = 'maria'
>>> 'I am %s.' % name
'I am maria.'

서식 지정자로 숫자 넣기 (%d)

  • '%d' % 숫자
>>> 'I am %d years old.' % 20
'I am 20 years old.'

%d 는 10진 정수(decimal integer)의 d 이다.

서식 지정자로 소수점 표현하기 (%f)

  • '%f' % 숫자
>>> '%f' % 2.3
'2.300000'

%f 를 사용하며 고정 소수점 fixed point의 f이다.

  • '%.자릿수f' % 숫자
>>> '%.2f' % 2.3
'2.30'
>>> '%.3f' % 2.3
'2.300'

자릿수도 지정할 수 있다.

서식 지정자로 문자열 정렬하기 (%길이s)

  • %길이s
>>> '%10s' % 'python'
'    python'

% 뒤에 숫자를 지정하면 그 숫자 만큼 길이의 문자열을 생성하고 오른쪽으로 정렬한 뒤에 남은 공간은 빈칸으로 채운다.

Untitled

%d %f

>>> '%10d' % 150
'       150'
>>> '%10d' % 15000
'     15000'

물론 %d 도 사용이 가능하다.

>>> '%10.2f' % 2.3
'      2.30'
>>> '%10.2f' % 2000.3
'   2000.30'

%f 도 사용이 가능한데 위 예제와 같이 정렬할 길이를 지정하고 소수점 이하 자릿수도 지정할 수 있다.

왼쪽 정렬

  • %-숫자s
>>> '%-10s' % 'python'
'python    '

Untitled

여러 개 서식 지정자로 문자열 안에 값 넣기

>>> 'Today is %d %s.' % (3, 'April')
'Today is 3 April.'

format 메서드 사용하기

파이썬에서는 문자열 안에 값을 넣을 때 서식 지정자보다 더 간단한 문자열 포매팅(string formatting)을 제공한다. 문자열 포매팅은 줄괄호{} 안에 포매팅을 지정하고 format 메서드로 값을 넣는다.

  • {인덱스}.format(값)
>>> 'Hello, {0}'.format('world!')
'Hello, world!'
>>> 'Hello, {0}'.format(100)
'Hello, 100'
>>> 'Hello, {0} {2} {1}'.format('Python', 'Script', 3.6)
'Hello, Python 3.6 Script'

Untitled

위의 예제와 같이 인덱스를 지정하면 그 인덱스에 맞는 값이 들어가게 된다. 만약 인덱스 숫자를 입력하지 않는다면 기본적으로는 format 에서 지정한 순서대로 값이 들어가게 된다.

>>> 'Hello, {} {} {}'.format('Python', 'Script', 3.6)
'Hello, Python Script 3.6'

format 메서드에 인덱스 대신 이름 지정하기

{ } 에 인덱스인 숫자로 지정하니까 알아보기가 조금 불편하다. 이럴땐 이름을 지정하면 된다.

>>> 'Hello, {language} {version}'.format(language='Python', version=3.6)
'Hello, Python 3.6'

위와 같이 인덱스 대신 이름을 지정하고 format 에서 이름에 해당 값을 입력해주면 된다.

문자열 포매팅에 변수를 그대로 사용하기

>>> language = 'Python'
>>> version = 3.6
>>> f'Hello, {language} {version}'
'Hello, Python 3.6'

파이썬 3.6 부터는 더 간단한 방법으로 {변수} 를 하여 값을 넣을 수 있다. 문자열 앞에는 포매팅(formatting)이라는 뜻으로 f 를 붙인다.

% 중괄호 자체 출력

>>> '{{ {0} }}'.format('Python')
'{ Python }'

중괄호 자체를 출력하려면 {{ }} 처럼 중괄호를 두 번 사용하면 된다.

format 메서드로 문자열 정렬하기

지금까지는 문자열을 정렬할 때 서식 지정자나 ljust, rjust , cente 로 정렬했었다. 문자열 포매팅에서도 문자열을 정렬할 수 있다.

  • {인덱스 :<길이}.format(값)
>>> '{0:<10}'.format('python')
'python    '

부등호가 왼쪽 방향(<) 을 가리키고 있고 그 뒤에 숫자 10 이 들어왔다. 그러면 길이를 10 만큼 만든 뒤에 왼쪽 정렬하게 되고 나머지 공간은 빈칸으로 채우게 된다.

Untitled

>>> '{0:>10}'.format('python')
'    python'

비슷한 방법으로 오른쪽 정렬은 위와 같이 하면 된다.

Untitled

>>> '{:>10}'.format('python')
'    python'

참고로 인덱스를 사용하지 않는다면 위와 같이 해도 된다.

숫자 정렬하기 (개수 맞추기)

이번에는 숫자 앞에 0을 넣어서 길이를 맞추는 방법에 대해서 알아보자

  • "%0개수" % 숫자
  • "{0:03d}.format(숫자)"
>>> '%03d' % 1
'001'
>>> '{0:03d}'.format(35)
'035'

%d 대신 %03d 와 같이 %d 사이에 0과 숫자를 넣어주면 자릿수에 맞춰 앞에 0이 들어가게 된다.

또는 { } 를 사용하여 인덱스나 이름 뒤에 콜론뒤에 03d 와 같이 0과 숫자의 개수를 지정하면 된다.

그렇다면 실수는 어떻게 표현할까? 정수랑 크게 다를게 없다.

>>> '%08.2f' % 3.6
'00003.60'
>>> '{0:08.2f}'.format(150.37)
'00150.37'

Untitled

채우기와 정렬 조합하기

>>> '{0:0<10}'.format(15)    # 길이 10, 왼쪽으로 정렬하고 남는 공간은 0으로 채움
'1500000000'
>>> '{0:0>10}'.format(15)    # 길이 10, 오른쪽으로 정렬하고 남는 공간은 0으로 채움
'0000000015'
>>> '{0: >10}'.format(15)    # 남는 공간을 공백으로 채움
'        15'
>>> '{0:>10}'.format(15)     # 채우기 부분을 생략하면 공백이 들어감
'        15'
>>> '{0:x>10}'.format(15)    # 남는 공간을 문자 x로 채움
'xxxxxxxx15'

천 단위 콤마

  • format(숫자, ',')
>>> format(1493500, ',')
'1,493,500'
    • 서식 지정자
>>> '%20s' % format(1493500, ',')    # 길이 20, 오른쪽으로 정렬
'           1,493,500'
  • 포매팅
>>> '{0:,}'.format(1493500)
'1,493,500'
  • 콤미 + 정렬
>>> '{0:>20,}'.format(1493500)     # 길이 20, 오른쪽으로 정렬
'           1,493,500'
>>> '{0:0>20,}'.format(1493500)    # 길이 20, 오른쪽으로 정렬하고 남는 공간은 0으로 채움
'000000000001,493,500'
profile
벨로그보단 티스토리를 사용합니다! https://flight-developer-stroy.tistory.com/

0개의 댓글