파이썬 왕초보 탈출기 #4: 문자열(str) 다루기 - 인덱싱, 슬라이싱, 필수 메소드 기초

Programming/파이썬|2025. 4. 8. 11:37
반응형

1. 문자열 인덱싱(Indexing) 복습 및 활용: 한 글자씩 정밀하게!

지난 시간에 배운 것처럼, 인덱싱은 문자열 내 특정 위치에 있는 한 글자에 접근하는 방법입니다. 대괄호 [] 안에 0부터 시작하는 인덱스 번호를 넣어 사용합니다. 음수 인덱스(-1은 마지막 글자)도 유용하게 사용될 수 있습니다.

review = "파이썬은 정말 유용합니다!"

# 첫 글자 가져오기 (인덱스 0)
first_char = review[0]
print(f"첫 글자: {first_char}") # 출력: 첫 글자: 파

# 마지막 글자 가져오기 (인덱스 -1)
last_char = review[-1]
print(f"마지막 글자: {last_char}") # 출력: 마지막 글자: !

# 특정 위치의 글자 가져오기
char_at_index_4 = review[4]
print(f"인덱스 4의 글자: {char_at_index_4}") # 출력: 인덱스 4의 글자: 은
  • 활용 예시: 사용자로부터 파일 이름을 입력받아 첫 글자와 마지막 글자를 확인하는 경우 등에 사용할 수 있습니다.
  • 주의: 항상 문자열 길이를 벗어나지 않는 유효한 인덱스만 사용해야 IndexError를 피할 수 있습니다.

 

2025.04.06 - [Programming/파이썬] - 파이썬 왕초보 탈출기 #3: 텍스트 데이터 처리 완벽 입문


2. 문자열 슬라이싱(Slicing) 복습 및 활용: 원하는 만큼 잘라내기!

슬라이싱은 [시작인덱스:끝인덱스:간격] 형식을 사용하여 문자열의 일부분(부분 문자열)을 추출하는 기능입니다. 끝 인덱스는 포함되지 않는다는 점을 기억해야 합니다.

file_path = "/users/data/report.docx"

# 파일 이름만 추출하기 (마지막 '/' 다음부터 끝까지)
# 마지막 '/'의 위치를 찾아야 하지만, 여기서는 간단히 인덱스로 가정합니다.
file_name = file_path[12:]
print(f"파일 이름: {file_name}") # 출력: 파일 이름: report.docx

# 확장자 제외한 이름 추출하기 (처음부터 '.' 직전까지)
# '.'의 위치를 찾아야 하지만, 여기서는 간단히 인덱스로 가정합니다.
base_name = file_name[:6]
print(f"확장자 제외 이름: {base_name}") # 출력: 확장자 제외 이름: report

# 처음 5글자만 미리보기
preview = review[:5] # "파이썬은 " (인덱스 0부터 5 직전까지)
print(f"리뷰 미리보기: {preview}") # 출력: 리뷰 미리보기: 파이썬은
  • 활용 예시: URL에서 특정 부분 추출, 로그 메시지에서 날짜 부분 추출, 긴 텍스트의 일부만 보여주기 등 다양하게 활용됩니다.

 


3. 문자열 메소드(String Methods): 문자열을 변형하는 마법!

파이썬 문자열은 자체적으로 다양한 메소드(Methods)를 가지고 있습니다. 메소드는 특정 데이터 타입(여기서는 문자열)과 관련된 특별한 함수라고 생각할 수 있습니다. 이 메소드들을 사용하면 문자열을 검색, 변경, 분리하는 등 훨씬 다채로운 작업을 수행할 수 있습니다.

문자열 메소드는 점(.) 표기법을 사용하여 호출합니다: 문자열_변수.메소드이름()

my_string = "Hello, Python!"
upper_string = my_string.upper() # upper() 메소드 호출
print(upper_string) # 출력: HELLO, PYTHON!
  • ★ 매우 중요 ★: 문자열은 불변(Immutable)입니다. 따라서 대부분의 문자열 메소드는 원본 문자열을 직접 변경하지 않습니다. 대신, 새로운 변경된 문자열을 반환(return)합니다. 변경된 결과를 계속 사용하려면 반환된 값을 새로운 변수에 저장하거나, 기존 변수에 다시 할당해야 합니다.
my_string = "    whitespace   "
my_string.strip() # strip() 메소드를 호출했지만, 반환값을 저장하지 않음
print(f"원본 문자열: '{my_string}'") # 출력: 원본 문자열: '   whitespace   ' (변화 없음)

cleaned_string = my_string.strip() # strip() 메소드의 반환값을 저장
print(f"공백 제거 후: '{cleaned_string}'") # 출력: 공백 제거 후: 'whitespace'

# 또는 기존 변수에 다시 할당
my_string = my_string.strip()
print(f"다시 할당 후: '{my_string}'") # 출력: 다시 할당 후: 'whitespace'

 


4. 필수 문자열 메소드 소개 (기초)

이제 초보자가 알아두면 매우 유용한 기본적인 문자열 메소드 몇 가지를 소개합니다.

 

upper() / lower() : 대소문자 변환

  • upper(): 모든 문자를 대문자로 변경한 새 문자열 반환
  • lower(): 모든 문자를 소문자로 변경한 새 문자열 반환
text = "Python is Fun"
print(text.upper()) # 출력: PYTHON IS FUN
print(text.lower()) # 출력: python is fun

# 활용: 사용자 입력을 대소문자 구분 없이 비교할 때
user_input = "Yes"
if user_input.lower() == "yes":
    print("사용자가 동의했습니다.")

strip() / lstrip() / rstrip() : 공백 또는 특정 문자 제거

  • strip(): 문자열 양쪽 끝의 공백(스페이스, 탭, 줄 바꿈 등) 제거
  • lstrip(): 문자열 왼쪽 끝의 공백 제거
  • rstrip(): 문자열 오른쪽 끝의 공백 제거
  • 괄호 안에 특정 문자를 넣어주면 해당 문자들을 제거합니다.
raw_input = "    \t  안녕하세요! \n  "
print(f"원본: '{raw_input}'")
print(f"strip(): '{raw_input.strip()}'")   # 출력: strip(): '안녕하세요!'
print(f"lstrip(): '{raw_input.lstrip()}'") # 출력: lstrip(): '안녕하세요! \n  '
print(f"rstrip(): '{raw_input.rstrip()}'") # 출력: rstrip(): '    \t  안녕하세요!'

special_chars = ".,!? "
sentence = "!!Hello, World?."
print(sentence.strip(special_chars)) # 출력: Hello, World (양쪽 끝의 .,!? 공백 제거)
  • 활용: 사용자 입력값의 불필요한 공백 제거, 데이터 정제 등에 매우 유용합니다.

replace(old, new[, count]) : 문자열 치환

  • 문자열 내의 old 문자열을 new 문자열로 바꾸어 반환합니다.
  • 선택적으로 count를 지정하면 앞에서부터 count개 만큼만 치환합니다.
sentence = "파이썬은 쉽고, 파이썬은 강력합니다."
print(sentence.replace("파이썬", "Python"))
# 출력: Python은 쉽고, Python은 강력합니다.

print(sentence.replace("파이썬", "Python", 1)) # 1번만 치환
# 출력: Python은 쉽고, 파이썬은 강력합니다.

find(substring[, start[, end]]) : 부분 문자열 찾기 (인덱스 반환)

  • substring이 처음 나타나는 위치의 인덱스를 반환합니다.
  • 만약 substring이 존재하지 않으면 -1을 반환합니다. (오류 발생 안 함)
  • 선택적으로 startend 인덱스를 지정하여 검색 범위를 제한할 수 있습니다.
text = "abcabcabc"
print(text.find('b'))     # 출력: 1 (첫 번째 'b'의 인덱스)
print(text.find('d'))     # 출력: -1 ('d'는 존재하지 않음)
print(text.find('b', 2)) # 인덱스 2부터 'b'를 검색 -> 출력: 4
  • 참고: index() 메소드도 비슷하지만, 찾는 문자열이 없으면 -1 대신 ValueError 오류를 발생시킵니다.

count(substring[, start[, end]]) : 부분 문자열 개수 세기

  • substring이 문자열 내에 몇 번 나타나는지 횟수를 반환합니다.
text = "abcabcabc"
print(text.count('a'))     # 출력: 3
print(text.count('bc'))    # 출력: 3
print(text.count('d'))     # 출력: 0

startswith(prefix[, start[, end]]) / endswith(suffix[, start[, end]]) : 시작/끝 문자열 확인

  • startswith(prefix): 문자열이 prefix로 시작하면 True, 아니면 False 반환.
  • endswith(suffix): 문자열이 suffix로 끝나면 True, 아니면 False 반환.
file_name = "report.docx"
url = "https://www.google.com"

print(file_name.endswith(".docx")) # 출력: True
print(file_name.startswith("report"))# 출력: True
print(url.startswith("https://"))  # 출력: True
print(url.endswith(".net"))       # 출력: False
  • 활용: 파일 확장자 확인, URL 스킴(http/https) 확인 등에 유용합니다.

 


5. 메소드 사용 시 주의점

  • 반환값 활용을 잊지 마십시오: 대부분의 메소드는 새 문자열을 반환합니다. 결과를 사용하려면 변수에 저장해야 합니다.
  • 메소드 호출 시 괄호 () 필수: 메소드를 사용(호출)할 때는 이름 뒤에 반드시 괄호 ()를 붙여야 합니다. 인자가 없는 메소드라도 my_string.upper() 처럼 괄호가 필요합니다.
  • find() 와 index() 의 차이: 문자열을 찾을 때, 존재하지 않을 가능성이 있다면 -1을 반환하는 find()가 오류 없이 프로그램을 계속 진행시키는 데 더 안전할 수 있습니다.

팁 & 종합 예제

메소드 체이닝 (Method Chaining): 여러 메소드를 연속적으로 호출할 수 있습니다. 각 메소드가 문자열을 반환하기 때문에 가능합니다. 코드를 간결하게 만들 수 있습니다.

messy_input = "    \t  USER ID: ExampleUser   \n"
# 공백 제거 -> 소문자 변환 -> "user id: " 제거
clean_user_id = messy_input.strip().lower().replace("user id: ", "")
print(f"정리된 ID: '{clean_user_id}'") # 출력: 정리된 ID: 'exampleuser'
  • 종합 예제: 사용자 입력을 받아 정리하고 특정 형식인지 확인하기
raw_email = input("이메일 주소를 입력하세요: ") # 예: "   MyEmail@Example.Com   "

# 1. 양쪽 공백 제거 및 소문자 변환 (메소드 체이닝)
email = raw_email.strip().lower()

# 2. 이메일 형식 확인 (간단하게 @ 포함 여부 및 .com으로 끝나는지만 확인)
if email.find('@') != -1 and email.endswith('.com'):
    print(f"유효한 이메일 형식입니다: {email}")
else:
    print(f"잘못된 이메일 형식입니다: {email}")

 


 

2025.04.06 - [Programming/파이썬] - 파이썬 왕초보 탈출기 #2: 숫자형(int, float) 완벽 이해 및 활용법

2025.04.05 - [Programming/파이썬] - 파이썬 왕초보 탈출기 #1: 변수(Variables), 데이터 마법상자

 

반응형

댓글()