파이썬 문자열 비교: ==, 대소문자, 공백 처리

파이썬 문자열 비교: ==, 대소문자, 공백 처리

파이썬에서 문자열이 같은지 확인할 때는 ==를 사용합니다. 문법은 간단하지만 사용자 입력에는 공백과 대소문자 차이가 숨어 있어 예상과 다른 결과가 자주 나옵니다.

같은지와 다른지 비교하기

language = "Python"

print(language == "Python")  # True
print(language == "python")  # False
print(language != "Java")    # True

문자열 비교는 대소문자를 구분합니다. is는 두 변수가 같은 객체인지 확인하는 연산자이므로 문자열 내용 비교에 사용하지 마십시오.

사용자 입력의 앞뒤 공백 제거

answer = input("계속할까요? ").strip()

if answer == "예":
    print("계속합니다.")

strip()은 문자열 양끝의 공백과 줄바꿈을 제거합니다. 문장 안쪽의 공백은 유지합니다.

대소문자를 무시해서 비교하기

answer = input("yes 또는 no: ").strip().casefold()

if answer in {"yes", "y"}:
    print("계속합니다.")
elif answer in {"no", "n"}:
    print("중단합니다.")
else:
    print("입력을 확인하세요.")

영문 위주라면 lower()도 충분한 경우가 많습니다. 여러 언어의 대소문자 동등 비교에는 casefold()가 더 적극적인 변환을 제공합니다. 비밀번호처럼 대소문자 자체가 의미인 값에는 적용하면 안 됩니다.

문자열의 크기 비교

print("10" < "2")  # True
print(10 < 2)      # False

문자열은 숫자의 크기가 아니라 문자 순서로 비교합니다. 숫자 입력을 크기 비교하려면 먼저 int()float()로 변환하십시오.

포함 여부와 시작·끝 확인

filename = "report.csv"

print("port" in filename)          # True
print(filename.startswith("rep"))  # True
print(filename.endswith(".csv"))   # True

파일 확장자를 검사할 때는 filename.casefold().endswith(".csv")처럼 대소문자를 정규화할 수 있습니다. 단, 업로드 파일의 안전성은 이름만으로 판단하지 말고 실제 형식과 저장 경로도 검증해야 합니다.

유니코드가 겉보기와 다를 때

화면에서 같아 보이는 글자도 내부 유니코드 조합이 다를 수 있습니다. 외부 시스템의 텍스트를 엄격하게 비교해야 한다면 unicodedata.normalize()로 정규화하는 방법을 검토하십시오.

오류 사례: is로 문자열을 비교하기

answer = "yes"
if answer is "yes":
    print("같음")

is는 값이 아니라 객체가 동일한지 확인합니다. 실행 환경에 따라 우연히 참처럼 보일 수 있어 더 위험합니다. 문자열 내용은 항상 ==로 비교합니다. 정적 분석 도구도 이런 코드를 경고합니다.

연습: 허용된 파일 확장자 검사

사용자가 입력한 파일 이름이 .jpg, .jpeg, .png 중 하나로 끝나는지 대소문자를 무시하고 판별해 보십시오. 힌트는 casefold()endswith((".jpg", ".jpeg", ".png"))입니다. 파일 이름이 통과해도 실제 파일 형식 검증은 별개라는 설명도 프로그램에 남겨 보세요.

정리

내용 비교에는 ==, 입력 정리에는 strip(), 대소문자 무시 비교에는 목적에 따라 casefold()를 사용합니다. 숫자로 사용할 문자열은 반드시 숫자 자료형으로 변환한 뒤 비교하십시오.