Python 전화번호 파싱하는 phonenumbers 라이브러리 알아보기

오늘은 Python에서 Google의 libphonenumber 라이브러리를 포팅한 전화번호 파싱할 수 있는 phonenumbers 라이브러리를 알아보려 합니다.

phonenumbers 설치

우선 virtualenv로 파이썬 환경을 분리해줍니다.

pip3 install virtualenv
virtualenv -mvenv env

env라는 이름의 가상 환경을 생성합니다.

source env/bin/activate

가상환경을 폴더에서 활성화합니다.

pip3 install --upgrade pip

pip의 업그레이드가 존재하는지 확인하고 진행합니다.

pip install phonenumbers

pip로 phonenumbers를 설치합니다.

기본 예제

import phonenumbers

phonenumbers를 가져옵니다.

phone1 = phonenumbers.parse("+821000000000", None)
print(phone1)
type(phone1)

phone2 = phonenumbers.parse("010 0000 0000", "KR")
print(phone2)

print(phone1 == phone2)

print(phonenumbers.is_valid_number(phone1))
print(phonenumbers.is_possible_number(phone1))

핸드폰 번호를 파싱해서 국가 코드와 전화번호를 출력할 수 있고, 올바른 전화번호 양식인지도 확인할 수 있습니다.

try:
  x = phonenumbers.parse("01000000000", None)
except phonenumbers.phonenumberutil.NumberParseException as e:
  print(e)

try:
  x = phonenumbers.parse("hello,world", None)
except phonenumbers.phonenumberutil.NumberParseException as e:
  print(e)

지역을 확인할 수 없거나, 핸드폰 번호가 아닐 시에 오류가 발생합니다.

print(phonenumbers.format_number(phone1, phonenumbers.PhoneNumberFormat.NATIONAL))
print(phonenumbers.format_number(phone1, phonenumbers.PhoneNumberFormat.INTERNATIONAL))
print(phonenumbers.format_number(phone1, phonenumbers.PhoneNumberFormat.E164))

번호를 출력할 포맷을 지정할 수 있습니다.

formatter = phonenumbers.AsYouTypeFormatter("KR")
print(formatter.input_digit("1"))
print(formatter.input_digit("0"))
print(formatter.input_digit("0"))
print(formatter.input_digit("0"))
print(formatter.input_digit("0"))
print(formatter.input_digit("0"))
print(formatter.input_digit("0"))
print(formatter.input_digit("0"))

한 문자씩 누적으로 출력할 수 있습니다.

text = "Call me at 010-0000-0000 after 10 am."
for match in phonenumbers.PhoneNumberMatcher(text, "KR"):
  print(match)

for match in phonenumbers.PhoneNumberMatcher(text, "KR"):
  print(phonenumbers.format_number(match.number, phonenumbers.PhoneNumberFormat.E164))

문자열에서 전화번호만 추출할 수 있습니다.

geocoder

from phonenumbers import geocoder

phonenumbers에서 geocoder를 가져옵니다.

kr_number = phonenumbers.parse("01000000000", "KR")
print(geocoder.description_for_number(kr_number, "ko"))

어느 나라의 전화번호인지 정해진 언어로 출력할 수 있습니다.

timezome

from phonenumbers import timezone

timezone을 가져옵니다.

kr_number = phonenumbers.parse("01000000000", "KR")
print(timezone.time_zones_for_number(kr_number))

해당 전화번호의 타임존을 알 수 있습니다.

Written on July 10, 2019