Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python – 문자열이 ASCII 범위 내에 있는지 확인하고 필터링하는 방법

파이썬에서 문자열이 ASCII 범위 내에 포함되어 있는지 확인하거나 필터링해야 하는 경우가 종종 있습니다. 예를 들어, 외부 데이터를 처리할 때 한글이나 특수 유니코드 문자가 섞여 있는지 검증해야 할 때 유용합니다.

이때 각 문자의 유니코드 코드 포인트를 구해주는 ord() 함수와 모든 요소가 조건을 만족하는지 검사하는 all() 내장 함수를 함께 사용하면 간단하게 해결할 수 있습니다.

예제 코드

my_string = "Hope you are well"

print("The string is :")
print(my_string)

my_result = all(ord(c) < 128 for c in my_string)

if(my_result == True):
    print("The string contains ASCII characters")
else:
    print("The string doesn't contain all ASCII characters")

실행 결과

The string is :
Hope you are well
The string contains ASCII characters

코드 설명

  • 먼저 문자열을 정의하고 콘솔에 그대로 출력합니다.

  • 제너레이터 표현식을 통해 문자열의 모든 문자에 대해 ord() 함수를 호출하여 해당 문자의 유니코드 값이 128 미만인지 검사합니다. ASCII 문자 집합은 코드 포인트 0~127로 정의되기 때문입니다.

  • all() 함수는 모든 조건식이 참일 경우에만 불리언 값 True를 반환합니다. 하나라도 128 이상의 값을 가진 문자가 있으면 False가 됩니다.

  • 반복 검사가 끝나면 결과 불리언 값을 if 문으로 확인합니다.

  • 검사 결과에 따라 해당하는 메시지를 콘솔에 출력합니다.

추가 팁: str.isascii() 메서드

참고로 파이썬 3.7부터는 str.isascii() 메서드를 제공하므로 위 코드를 더욱 간결하게 작성할 수 있습니다.

my_string = "Hope you are well"

if my_string.isascii():
    print("모든 문자가 ASCII 범위 내에 있습니다")
else:
    print("ASCII 범위를 벗어난 문자가 포함되어 있습니다")

두 방법 모두 동일한 결과를 제공하지만, isascii() 메서드가 내부적으로 최적화되어 있어 더 빠르고 가독성도 뛰어납니다. 다만 ord()와 all()을 조합한 방식은 특정 코드 포인트 범위를 직접 지정해야 하는 등 더 세밀한 제어가 필요할 때 유용하게 활용할 수 있습니다.