22. Python에서 문자열을 능숙하게 사용합시다. – 관련 함수(멤버 메서드)

안녕하세요. 언휴예요.

이전 강의에서 문자열을 선언하는 것과 관련 연산을 살펴보았어요. 이번에는 String 형식에서 제공하는 멤버 메서드를 살펴볼게요. 이번 강의는 단편적인 내용을 열거하는 형태이며 다룰 메서드가 많아서 다른 강의보다 분량이 많습니다.

String 형식의 멤버 메서드를 살펴보기에 앞서 Python에서 제공하는 내장 함수 중에 문자열을 입력 인자로 받아 사용하는 len, max, min 함수를 알아보아요. len 함수는 문자열 길이를 반환하고 mxx는 문자열을 구성하는 문자 중에 아스키 코드 값이 제일 큰 문자를 반환하고 min은 제일 작은 문자를 반환합니다.

#Python 내장 함수 len, max, min

src = "abcdABCD1234"
print("src:",src)
print("length:", len(src))
print("max:",max(src))
print("min:",min(src))
[그림 1] 내장 함수 len, max, min 사용 예제 실행화면
[그림 1] 내장 함수 len, max, min 사용 예제 실행화면

String 형식에는 매우 다양한 멤버 메서드를 제공하고 있어요. 문자열을 구성하고 있는 부분 문자열을 검색하거나 문자의 첫 자를 대문자로 변환하는 등의 다양한 메서드를 제공합니다.

String 형식의 모든 멤버 메서드를 사용해 보고 기억하면 좋겠지만 매 번 모든 것을 짚고 넘어가는 것에는 한계가 있어요. 다양한 경험을 통해 어떠한 멤버가 있을 지 유추할 수 있거나 특정 멤버의 이름과 인자를 보고 어떻게 사용할 수 있는지를 직관적으로 알아낼 수 있다면 모든 것을 기억하지 않아도 큰 문제가 없을 거예요. 물론 이러한 능력이 없다고 하더라도 필요할 때 검색하거나 주변에 도움을 받아 해결할 수 있다면 문제를 해결할 수는 있겠죠.

여기에서는 모든 멤버 메서드를 소개하고 설명하지는 않을 거예요. 대략적인 소개를 할 것이며 여러분께서 직접 사용해 보세요.

  • capitalize

capitalize 메서드는 첫 자를 대문자로 변환한 문자열을 반환합니다.

#String 형식의 capitalize 메서드

def UseCapitalize(src):
    print("원본:",src)
    print("변경:",src.capitalize())


str1 = "i am a boy"
str2 = "here is ehpub"

UseCapitalize(str1)
UseCapitalize(str2)
[그림 2] capitalize 메서드 사용 예제 실행화면
[그림 2] capitalize 메서드 사용 예제 실행화면
  • count

String 형식의 count 메서드는 문자열 내부에 원하는 부분 문자열이 몇 번 존재하는지 반환하는 메서드입니다.

#String 형식의 count 메서드
#str.count(sub, start= 0,end=len(string))

print("===Test count===")
str="this is a sample string. that is ..."
print("origin:",str)
print("is count",str.count("is"));
[그림 3] count 메서드 사용 예제 실행화면
[그림 3] count 메서드 사용 예제 실행화면
  • encode/decode

String 형식에는 코드셋에 맞게 인코딩 및 디코딩할 수 있는 멤버 메서드를 제공하고 있습니다. 지금 당장 사용하지는 않지만 파일 입출력이나 다른 서비스와 통신으로 얻어온 데이터를 사용할 때 필요할 수 있어요.

#String 형식의 encode decode 메서드
#str.decode(encoding='UTF-8',errors='strict')
#str.encode(encoding='UTF-8',errors='strict')

str = "안녕하세요.";
print("===Test encode/decode===")
str =str.encode('utf-8')
print ("Encoded String: " , str)
print ("Decoded String: " , str.decode('utf-8'))
[그림 4] encode, decode 메서드 사용 예제 실행화면
[그림 4] encode, decode 메서드 사용 예제 실행화면
  • endswith, startswith

String 형식의 endswith 메서드는 문자열의 끝이 원하는 부분 문자열로 마감하는지 판별하는 메서드입니다. 그리고 startswith 메서드는 문자열의 앞이 원하는 부분 문자열로 시작하는지 판별하는 메서드입니다.

#String 형식의 endswith, startswith 메서드
str="This is a house."
print("===Test endswith===")
print(str,"<endswith house.>:",str.endswith("house."))
print(str,"<endswith This>:",str.endswith("This"))
print("===Test startswith===")
print(str,"<startswith house.>:",str.startswith("house."))
print(str,"<startswith house.>:",str.startswith("This"))
[그림 5] endswith, startswith 메서드 사용 예제 실행화면
[그림 5] endswith, startswith 메서드 사용 예제 실행화면
  • find, index , rfind, rindex

String 형식에는 부분 문자열이 어느 위치에 있는지 판별하는 메서드를 제공하고 있습니다. find와 index는 앞에서부터 처음 발견하는 위치를 반환하는 메서드입니다. rfind, rindex는 뒤에서부터 처음 발견하는 위치를 반환하는 메서드입니다. 그리고 find와 rfind는 발견하지 못하였을 때 -1을 반환하며 index와 rindex는 예외를 발생합니다.

#String 형식의 find, index, rfind, rindex 메서드
str="0123456789abc1234567890abc"
print("===Test find===")
print("origin:",str)
print("abc:",str.find("abc"))
print("bbc:",str.find("bbc"))
#index 함수도 존재하지 않을 때 예외를 발생하는 것을 제외하면 같음
print("===Test rfind===")
print("abc:",str.rfind("abc"))
print("bbc:",str.rfind("bbc"))
#rindex 함수도 존재하지 않을 때 예외를 발생하는 것을 제외하면 같음
[그림 6] find, rfind 메서드 사용 예제 실행화면
[그림 6] find, rfind 메서드 사용 예제 실행화면
  • isalnum, isalpha, isdecimal, isdigit, islower, isnumeric, isspace, istitle, isupper

String 형식에는 문자열을 구성하는 원하는 종류의 문자들로 구성하는지 판별하는 메서드를 제공합니다. 메서드 이름을 보면 예측할 수 있듯이 isalnum(알파벳과 숫자), isalpha(알파벳), isdecimal(10진수), isdigit(숫자), islower(소문자), isnumeric(숫자), isspace(공백을 포함), istitle(단어의 첫자가 대문자), isupper(대문자)입니다.

#String 형식의 isalnum, isalpha, isdigit, islower, isnumeric, isspace, istitle, isupper 메서드

def TestCase(src):
    print("테스트 문자열:",src)
    print("isalnum:",src.isalnum())
    print("isalpha:",src.isalpha())
    print("isdigit:",src.isdigit())
    print("islower:",src.islower())
    print("isnumeric:",src.isnumeric())
    print("isspace:",src.isspace())
    print("istitle:",src.istitle())
    print("isupper:",src.isupper())

items = ["abcdefg", "ABCDEFG", "1234567890", "abcd1234EFG", "This is a test.", "This Is A Test."]

for item in items:
    TestCase(item)
[그림 7] isalnum, isalpha, isdigit, islower, isnumeric, isspace, istitle, isupper 메서드 사용 예제 실행화면
[그림 7] isalnum, isalpha, isdigit, islower, isnumeric, isspace, istitle, isupper 메서드 사용 예제 실행화면
  • join

String 형식의 join 메서드는 여러 개의 원소 문자열을 연결하여 반환합니다.

#String 형식의 join 메서드

items=["One", "Two", "Three", "Four"]
print("items:",items)
delim = "~"
print("Delimeter:",delim)
nums= delim.join(items)
print("After Join:",nums)
[그림 8] join 메서드 사용 예제 실행화면
[그림 8] join 메서드 사용 예제 실행화면
  • ljust, rjust

문자열을 출력할 때 쉽게 볼 수 있게 원하는 폭을 차지하게 출력할 때가 있어요. 이 때 ljust, rjust 메서드를 사용하세요. 두 가지 메서드 모두 폭을 지정할 수 있어요. 그리고 빈 공간을 채울 문자를 선택적으로 전달할 수 있습니다. 이름에서 유추할 수 있는 것처럼 두 메서드는 원본 문자열을 왼쪽 정렬로 채울 것인지 오른쪽 정렬로 채울 것인지에 따라 선택해서 사용하세요.

#String 형식의 ljust, rjust 메서드
#str.rjust(width[, fillchar])

headers=["이름","주소지"]
print(headers[0].rjust(10,'#'),end="\t")
print(headers[1])
member=["마야","가나다"]
print(member[0].rjust(10,'#'),end="\t")
print(member[1])
[그림 9] rjust 메서드 사용 예제 실행화면
[그림 9] rjust 메서드 사용 예제 실행화면
  • lower, upper, swapcase

String 형식에는 문자열을 구성하는 문자 중에 대문자와 소문자를 변형하는 메서드를 제공합니다. 모든 문자를 소문자로 바꿀 때는 lower, 대문자로 바꿀 때는 upper, 대소문자를 상호 변환할 때는 swapcase 메서드를 사용하면 변환한 문자열을 반환합니다.

#String 형식의 lower, upper, swapcase 메서드

src = "tHIS IS A HOUSE."
print("원본 문자열:",src)
print("lower:",src.lower())
print("upper:",src.upper())
print("swapcase:",src.swapcase())
[그림 10] lower, upper, swapcase 메서드 사용 예제 실행화면
[그림 10] lower, upper, swapcase 메서드 사용 예제 실행화면
  • lstrip, rstrip, strip

Python의 String 형식에는 원하는 문자를 제거하는 strip메서드를 제공하고 있어요. 그리고 앞쪽에 연속으로 존재하는 문자를 제거할 때 lstrip, 뒤쪽에서 제거할 때 rstrip 메서드를 사용하세요.

#String 형식의 lstrip, rstrip, strip 메서드

src="111111111This is a example.111111111111"
print("원본 문자열:",src)
print("src.strip(\'1\')",src.strip('1'))
print("src.lstrip(\'1\')",src.lstrip('1'))
print("src.rstrip(\'1\')",src.rstrip('1'))
[그림 11] strip, lstrip, rstrip 메서드 사용 예제 실행화면
[그림 11] strip, lstrip, rstrip 메서드 사용 예제 실행화면
  • maketrans, translate

Python의 String 형식에는 원본 문자열의 특정 문자를 다른 문자로 변환하기 쉽게 maketrans와 translate 메서드를 제공합니다. maketrans에서는 어떤 문자를 어떠한 문자로 바꿀 것인지 결정하고 해당 결과를 translate 메서드에 입력 인자로 전달하여 변환한 문자열을 구할 수 있습니다.

이를 이용하면 치환 암호를 손쉽게 표현할 수 있어요. 다음은 origin에 있는 문자를 trans에 있는 문자로 치환하는 예제입니다. (숫자문자 1은 숫자문자 3, 숫자 문자 2는 숫자문자 6, …)

#String 형식의 maketrans, translate 메서드

origin="1234567890"
trans = "3692581470"
print(origin)
print("=>")
print(trans)
src = "29384756"
o_t = src.maketrans(origin,trans)
print("원본 문자열:",src)
print("치환 문자열:",src.translate(o_t))
[그림 12] maketrans, translate 메서드 사용 예제 실행화면
[그림 12] maketrans, translate 메서드 사용 예제 실행화면
  • replace, split

String 형식에는 원본의 특정 부분 문자열을 원하는 새로운 부분 문자열로 치환하는 replace 메서드를 제공합니다. 그리고 특정 구분자를 기준으로 문자열을 분할하는 split 메서드를 제공합니다.

#String 형식의 replace, split 메서드

src = "I are a boy."
print("원본:",src)
dst = src.replace("are","am")
print("변경:",dst)

str="Where are you going?"
print("원본:",str)

print("단어...")
for sub in str.split(' '):
    print(sub)
[그림 13] replace, split 메서드 사용 예제 실행화면
[그림 13] replace, split 메서드 사용 예제 실행화면