[python] 문자열 응용하기

문자열 조작하기

import string

# replace('바꿀 문자열', '새 문자열') 은 문자열 안의 문자열을 다른 문자열로 바꾼다.
print('Hello world'.replace('world', 'python'))

# str.maketrans('바꿀 문자', '새 문자') 로 변환 테이블을 만들고
# translate(테이블) 을 이용해 문자열 안의 문자를 다른 문자로 바꾼다.
table = str.maketrans('aeiou', '12345')
print('apple'.translate(table))

# split()은 공백 기준으로 문자열을 분리하여 리스트로 만든다.
print('I am Park Ji Weon'.split())

# split('기준 문자열') 은 기준 문자열로 문자열로 분리한다.
print('apple, pear, grape, pineapple, orange'.split(', '))

# join(리스트) 는 구분자 문자열과 문자열 리스트의 요소를 연결해 문자열로 만든다.
print(' '.join(['a', 'b', 'c', 'd', 'e']))
print('-'.join(['a', 'b', 'c', 'd', 'e']))

# upper()은 문자열의 문자를 모두 대문자로 바꾼다.
print('python'.upper())

# lower()은 문자열의 문자를 모두 소문자로 바꾼다.
print('PYTHON'.lower())

# lstrip()을 이용해 문자열의 왼쪽 공백 삭제가 가능하다.
print('    abcd    '.lstrip())

# rstrip()을 이용해 문자열의 오른쪽 공백 삭제가 가능하다.
print('    abcd    '.rstrip())

# strip()을 이용해 문자열에서 양쪽에 있는 공백 삭제가 가능하다.
print('    abcd    '.strip())

# 각각의 메소드 안에 삭제할 문자열을 넣어 왼쪽/오른쪽/양쪽의 삭제할 문자가 삭제된다.
print(', abcd.'.lstrip(',.'))
print(', abcd.'.rstrip(',.'))
print(', abcd.'.strip(',.'))

# string모듈의 punctuation에는 모든 구두점이 들어있다.
# '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
print(', abcd.'.strip(string.punctuation))

# ljust, rjust는 왼쪽, 오른쪽에 문자열을 정렬하고 남는 공간을 공백으로 채운다.
print('python'.ljust(10))
print('python'.rjust(10))

# center로 문자열을 가운데 정렬하고 남는 공간을 공백으로 채울 수 있다.
# 남는 공간이 홀수가 될 경우에는 왼쪽에 공백이 한 칸 더 들어간다.
print('python'.center(10))

# 문자열 메소드는 처리한 결과를 반환한다.
# 이를 이용해 메소드를 계속 연결해 호출하는 것을 메소드 체이닝(method chaining)이라고 한다.
print('python'.rjust(10).upper())

# zfill(길이) 를 이용해 지정된 길이에 맞춰서 왼쪽에 0을 채울 수 있다.
# 문자열의 길이보다 지정된 길이가 작으면 아무것도 채우지 않는다.
# 보통 zfill은 숫자를 일정 자릿수로 맞추고 앞자리를 0으로 채울 때 사용
print('35'.zfill(4))
print('3.5'.zfill(6))
print('hello'.zfill(10))

# find('찾을 문자열')은 문자열에서 특정 문자열 찾아서 인덱스 반환하고, 없으면 -1을 반환
# 왼쪽에서부터 찾는데, 같은 문자열이 여러개면 처음 찾은 문자열의 인덱스 반환
# 오른쪽에서부터 찾고싶다면 rfind('찾을 문자열')을 하면 된다.
print('apple pl pl pl'.find('pl'))
print('apple pl pl pl'.rfind('pl'))
print('apple pl pl pl'.find('asdf'))

# find, rfind 외에도 index, rindex를 통해 특정 문자열의 위치를 찾을 수 있다.
# 그런데, 이 경우에는 찾는 문자열이 존재하지 않으면 에러를 발생시킨다.
print('apple pl pl pl'.index('pl'))
print('apple pl pl pl'.rindex('pl'))

# count('문자열')은 특정 문자열이 몇 번 나오는지 센다.
print('apple pl pl pl'.count('pl'))

문자열 서식 지정자와 포매팅 사용하기

# 서식 지정자를 문자열에 사용할 수 있다.
print('I am %s' % 'park')  # 문자열 서식 지정자 %s
print('I am %d years old' % 24)  # 정수 서식 지정자 %d
print('I have %f won' % 1.1)  # 실수 서식 지정자 %f, 소수점 이하 6자리까지 표시
print('I have %.3f won' % 1.1)  # 자리수 지정은 %.자리수f
print('%10s' % 'python')  # %길이f 로 길이 정하고 오른쪽 정렬
print('%-10s' % 'python')  # %-길이f 로 길이 정하고 왼쪽 정렬
print('%10.2f' % 2.3)  # %길이.자릿수f 로 길이와 자릿수를 같이 정할 수도 있다.
print('%s is %d years old' % ('park', 24))  # 괄호로 서식지정자에 넣을 값들을 묶어준다.

# format 메소드로 값 넣기
# { } 에 인덱스 지정 후 format에 인덱스가 증가하는 순으로 값 넣으면 된다.
print('Hello, {0} {2} {1}'.format('Python', 'Script', 3.6))
print('{0} {0} {1} {1}'.format('a', 'b'))  # 같은 인덱스 지정하면 값 여러개 들어간다
print('{} {} {} {}'.format(1, 2, 3, 4))  # 인덱스 생략 시 순서대로
print('{language} {version}'.format(language='Python', version=3))  # 인덱스 대신 이름 지정도 가능

# 파이썬 3.6부터는 변수에 값 넣고 {}에 변수 이름 지정해서도 사용 가능
# 이 때는 문자열 앞에 formatting 이라는 뜻으로 f 붙인다.
language = 'Python'
version = 3
print(f'{language} {version}')

# 중괄호 자체를 출력할 때는  처럼 중괄호를 두번 사용하면 된다.

# {인덱스:방향길이}.format()으로 정렬을 할 수 있다.
print('{0:<10}'.format('python'))
print('{0:>10}'.format('python'))
print('{:>10}'.format('python'))  # 인덱스를 사용하지 않으려면 그냥 생략해주면 된다.

# '%0개수d' % 숫자 로 자릿수에 맞춰서 앞에 0이 들어간다.
print('%03d' % 1)

# {인덱스:0개수d} 로도 위와 같은 효과를 낼 수 있다.
print('{0:03d}'.format(35))

# 실수도 가능하고, 소수점 이하 자릿수 정하고 싶으면 . 뒤에 자릿수를 정해준다.
print('%08.2f' % 3.6)
print('{0:08.3f}'.format(150.37))

# 길이를 10으로 만들고, 남는 공간은 지정한 문자로 채운다.
print('{0: >10}'.format(55))  # print('{0:>10}'.format(55)) 처럼 아무것도 안넣어도 공백으로 채워진다.
print('{0:x>10}'.format(55))  # 길이 10, 오른쪽 정렬, 남는 공간 x로 채운다.
print('{0:x>10.2f}'.format(55))  # 길이 10, 오른쪽 정렬, 소수점 둘째자리까지, 남는공간 x로

# format 에 ','를 넣어주면 간단하게 천단위로 콤마를 넣을 수 있다.
# format(숫자, ',')
print(format(12345678, ','))
print('%20s' % format(12345678, ','))  # 서식지정자랑 함께 사용할 수도 있다.

# 포매팅에서 , 를 넣으려면 콜론 뒤에 콤마 넣으면 된다.
print('{0:,}'.format(12345678))

# 정렬을 하고싶다면 정렬 방향, 길이 뒤에 콤마 넣어준다.
print('{0:>20,}'.format(12345678))

# 문자열 앞에 r 또는 R을 붙여서 raw 문자열을 만들 수 있다.
print(r'\n\n\n')

Updated:

Leave a comment