본문 바로가기

파이썬/사용법

[python] 문자열 메서드 정리

문자열 메서드 상황에 따른 정리 

 

안녕하세요! 이번 글에서는 파이썬의 문자열 메서드에 대해서 알아보려고 합니다.

파이썬은 여러 가지 문자열 메서드를 제공합니다.

이를 상황에 맞게 활용하면 정말 다양한 상황에서도 텍스트 처리를 원활하게 수행할 수 있습니다.

변환, 제거, 분리, 결합, 패턴 찾기, 교체, 판단 키워드에 따라 메서드를 정리한 내용을 다룰 예정입니다.

 

1) 소문자와 대문자 변환

문자열을 소문자 또는 대문자로 변환해야 할 때가 있습니다.

이를 위해 'lower()'와 'upper()' 메서드를 사용할 수 있습니다.

>>> text = "ABcDE"

>>> text.lower()
'abcde'

>>> text.upper()
'ABCDE'

2) 공백 제거하기

공백을 제거할 때는 strip() 메서드를 사용합니다.

[l = left , r = right ] lstrip()과 rstrip() 메서드를 사용하여 한 방향의 공백만 없애는 것도 가능합니다.

strip() 메서드는 chars라는 인자를 받는데 (기본값은 None입니다 즉 공백만 삭제)

여기에 "b"를 던져주면 b를 모두 삭제합니다.

>>> text = "    aaa    "

>>> text.lstrip() # 왼쪽 방향 공백만 없애기 
'aaa    '

>>> text.rstrip() # 오른쪽 방향 공백만 없애기 
'    aaa'

>>> text.strip() # 양방향 공백 없애기
'aaa'
>>>

>>> text = "bb    aaa    bb"
>>> text.strip("b") # 공백 대신 모든방향 b 없애기
'    aaa    '

3) 문자열 분리

문자를 분리하는 데 사용하는 메서드는 split입니다

split(self, /, sep=None, maxsplit=-1) 리스트를 반환

# sep = 구분할 글자  maxsplit = 최대 분할 개수 (기본값 = -1 즉 제한 없음)

>>> text = "aaa bbb ccc"

>>> text.split()
['aaa', 'bbb', 'ccc'] # aaa bbb ccc 공백을 기준으로 하나씩 리스트에 담음

>>> text = "aaa<>bbb<>ccc"

>>> text.split("<>")# <>를 기준으로 하나씩 리스트에 담음
['aaa', 'bbb', 'ccc']

>>> text = "aaa<>bbb<>ccc" 

>>> text.split("<>",maxsplit=1) # <>를 기준으로 한번만 분리하고 리스트에 담음 
['aaa', 'bbb<>ccc']

위처럼 maxsplit을 조정하여 한번만 분리할 수도 있겠습니다.

3) 문자열 결합

문자열을 결합하는 데 사용하는 메서드는 join입니다.

join(self, iterable, /) iterable 한 객체를 받으며 문자열을 반환합니다.

iterable 한 객체에는 튜플, 리스트 등이 있겠습니다.

>>> " ".join(["a","b","c","d","e"]) # 합친다. 리스트안의 문자를 중간에 공백을 넣으면서
'a b c d e'

>>> "".join(["a","b","c","d","e"]) # 합친다. 리스트안의 문자를 중간에 아무것도 안넣으면서
'abcde'

>>> slash = "/"

>>> print(slash.join(["a","b","c","d","e"])) # 합친다. 리스트안의 문자를 slash를 하나씩 넣어주면서
a/b/c/d/e

리스트를 가져오는데 그 사이에 앞의 string을 끼워준다고 생각하시면 편하겠습니다.

 

4-1) 특정 패턴 찾기

문자열에서 특정 패턴이 등장하는지 확인하려면 startswith(), endswith(), index(), find(), count()을 사용할 수 있습니다.

startswith(prefix [, start [, end]]) # 특정한 문자로 시작하는지 확인 가능 튜플  가능

endswith(suffix [, start [, end]]) # 특정한 문자로 끝나는지 확인 가능 튜플 가능

둘 다 조건에 일치하면 True 불일치하면 False를 반환합니다.

>>> name = "김정은"
>>> a = "김정"

>>> name.startswith(a) # name 변수가 "김정" 으로 시작하는지?
True

>>> a = "김","정"
>>> name.startswith(a) # name 변수가 "김","정" 으로 시작하는지 (튜플이 가능하다는 것을 보여줌)
True

>>> textfile = ".txt" 
>>> filename = "20230716.txt"
>>> filename.endswith(textfile) # 파일 이름이.txt로 끝나는지 ?
True

#start = 4 end = 7 이런식으로 시작,끝 범위도 지정가능
>>> test_string = "012345zzz"
>>> test_string.startswith("5",4,7) # 찾을 문자, 찾기 시작할 인덱스, 끝나는 인덱스
False

>>> test_string.startswith("5",5,7) # 찾을 문자, 찾기 시작할 인덱스, 끝나는 인데스
True

4-2) 특정 패턴 확인

str.index(sub [, start [, end]])

str.find(sub [, start [, end]])

substring sub가 있는 string에서 가장 낮은 인덱스를 반환합니다.

index는 str 중에 substring이 없으면 ValueError를 발생시키지만 find-1을 반환합니다.

프로그램이 꺼져야 할 정도로 중대한 에러라면 index를 사용하고 그 외는 find를 사용하는 것이 적절해 보입니다.

둘 다 가장 낮은 인덱스를 반환하지만 rindex, rfind 등 뒤에서부터 탐색하는 메서드도 있으니 사용해 보시길 바랍니다.

>>> test_string = "abcabc"
>>> test_string.index("a")
0
>>> test_string.index("a",2) # 찾을 문자, 찾기 시작할 인덱스
3
>>> test_string.index("f") # f는 없어서 ValueError 발생 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found


>>> test_string.find("a")
0
>>> test_string.find("a",2)
3
>>> test_string.find("f") # find는 패턴이 없으면 -1을 반환한다.
-1

4-3) 특정 패턴 확인

str.count(sub [, start [, end]])

count는 str 중 substring이 몇 개 있는지 찾아서 반환하는 함수입니다.

>>> test_string = "abcabc"

>>> test_string.count("a") # test_string에 처음부터 끝까지 a가 몇개 있는지
2

>>> test_string.count("a",2) # test_string 2번째순서부터 끝까지 a 가 몇 개 있는지
1

>>> test_string.count("f") # test_string에 처음부터 끝까지 f가 몇개 있는지
0

 

5) 문자열 교체

문자열 내의 특정 패턴을 다른 문자열로 교체하려면 replace() 메서드를 사용합니다.

str.replace(oldnew [, count]) #  (바꿔야 하는 글자, 바꿀 글자, 몇 번까지 바꿀 건지)를 던져주고 바뀐 문자열을 반환합니다.

 

>>> test_string = "abcabc"

>>> test_string.replace("a","b") # 모든 a를 b로 교체 
'bbcbbc'

>>> test_string.replace("a","b",1) # 제일 첫번 째 a만 b로 교체
'bbcabc'

>>> test_string.replace("a","b",2) # 두번 째로 찾은 a 까지 b로 교체
'bbcbbc'

# test_string이 가진 a보다 큰 숫자를 적어봤을 때
>>> test_string.replace("a","b",3) # 3번 째로 찾은 a 까지 b로 교체 (큰 숫자 적어도 별일 없음)
'bbcbbc'

count에 더 크게 전달해도 센스 있게 알아듣습니다.

6) 문자열 판단

문자열이 숫자인지 영어인지 대문자인지 소문자인지 공백문자만 있는지 판단해 주는 메서드가 있습니다.

str.isalpha() # 알파벳으로만 이루어져 있는가?? # 숫자는 False

str.isspace() # 공백으로만 이루어져 있는가?

str.isupper() # 대문자로만 이루어져 있는가?

str.islower() # 소문자로만 이루어져 있는가?

str.isdigit() # 숫자로만 이루어져 있는가?

>>> text = "a"
>>> text.isalpha() # 알파벳인지?
True
>>> text.isspace() # 공백으로만 이루어져 있는지?
False
>>> text.isupper() # 대문자로만 이루어져 있는지?
False
>>> text.islower() # 소문자로만 이루어져 있는지?
True
>>> text = "1"
>>> text.isdigit() # 숫자인지?
True
>>> # property value Numeric_Type=Digit, Numeric_Type=Decimal or Numeric_Type=Numeric.
>>> # 3개 중 해당되는지?
>>> text.isnumeric() 
True
>>> text.isdecimal()
True
>>> text = " "
>>> text.isspace()
True

if 문이라던지 이런것들에서 문자열이 어떤 문자열인지 판단해야할 때  유용하게 사용할 수 있습니다.


정리) 

문자열 메서드에는 여러 가지 종류가 있습니다.

종류는 변환, 제거, 분리, 결합, 패턴 찾기, 교체, 판단 등이 있습니다.

 

마치면서)

문자열을 다루는 다양한 작업에서 메서드를 활용할 줄 안다면

훨씬 효율적이고 간편하게 코드를 작성할 수 있습니다.

파이썬 공식 문서에서 더 많은 문자열 메서드와 예제를 찾아보시면 더욱 자세한 정보를 얻을 수 있습니다. 

 

이로써 파이썬 문자열 메서드에 대한 내용을 마치겠습니다. 
다음 글에서도 유용한 파이썬 팁과 기능을 소개하도록 하겠습니다

감사합니다.