파이썬 문자열 대문자·소문자 변환 제대로 사용하기

파이썬 문자열 대문자·소문자 변환 제대로 사용하기

파이썬 문자열에는 upper(), lower() 같은 대소문자 변환 메서드가 있습니다. 사용법은 짧지만 원본 문자열이 바뀌지 않는다는 점과 비교용 변환의 목적을 구분해야 합니다.

upper와 lower 기본

text = "Python 3.12"

print(text.upper())  # PYTHON 3.12
print(text.lower())  # python 3.12
print(text)          # Python 3.12

문자열은 변경 불가능한 자료형입니다. 메서드는 새 문자열을 반환하므로 결과를 계속 사용하려면 변수에 저장해야 합니다.

normalized = text.lower()

첫 글자와 제목 형태

sentence = "python is useful"
print(sentence.capitalize())  # Python is useful
print(sentence.title())       # Python Is Useful

title()은 모든 단어를 기계적으로 처리하므로 고유명사, 약어, 작은따옴표가 포함된 실제 제목을 완벽하게 교정하지는 못합니다. 사용자에게 보여 줄 제목은 결과를 검토해야 합니다.

대소문자를 무시한 비교

saved = "Python"
entered = "PYTHON"

if saved.casefold() == entered.casefold():
    print("같은 단어입니다.")

영문만 다루면 lower()도 흔히 사용하지만, 국제화된 문자열의 동등 비교에는 casefold()가 더 적합합니다. 비밀번호에는 대소문자 변환을 적용하지 마십시오.

문자 종류 확인

value = "Python"
print(value.isupper())  # False
print(value.islower())  # False
print(value.swapcase()) # pYTHON

isupper()islower()는 대소문자 구분이 가능한 문자를 기준으로 판단합니다. 숫자와 한글만 있는 문자열에서는 기대와 다를 수 있으므로 테스트가 필요합니다.

파일 확장자 비교 예제

filename = "REPORT.CSV"

if filename.casefold().endswith(".csv"):
    print("CSV 파일 이름입니다.")

이 코드는 이름만 확인합니다. 업로드 파일이 실제 CSV인지와 안전한지는 별도 검증이 필요합니다.

원본을 잃어버리는 실수

username = input("이름: ")
username = username.lower()

비교만 하려던 것이라면 원래 표기를 잃었습니다. 표시용 원본과 비교용 값을 분리하십시오.

display_name = input("이름: ").strip()
comparison_name = display_name.casefold()

이렇게 하면 화면에는 사용자가 입력한 표기를 보여 주면서 중복 확인에는 정규화된 값을 사용할 수 있습니다.

연습: 명령어 처리기

HELP, Help, help를 모두 같은 명령으로 처리하되 입력한 원문도 로그에 남기는 코드를 작성해 보십시오. 빈 입력과 알 수 없는 명령도 구분해서 출력합니다.

공백 정리와 대소문자 변환의 순서

사용자 입력 비교에서는 보통 양끝 공백을 제거한 뒤 대소문자를 정규화합니다.

raw = "  PyThOn  "
normalized = raw.strip().casefold()
print(repr(normalized))  # 'python'

repr()로 출력하면 눈에 잘 보이지 않는 공백과 이스케이프 문자를 확인할 수 있습니다. 문장 내부의 여러 공백까지 하나로 줄여야 한다면 " ".join(raw.split())을 사용할 수 있지만, 사용자가 입력한 서식을 보존해야 하는 데이터에는 적용하면 안 됩니다.

정리

표시 형태를 바꿀 때는 upper()lower(), 대소문자를 무시한 비교에는 casefold()를 고려하십시오. 모든 메서드는 새 문자열을 반환하며, 자동 제목 변환 결과는 사람이 확인해야 합니다.