phonenumbers
是一个非常强大的 Python 库,用于解析、格式化、验证和提取电话号码。它基于 Google 的 libphonenumber 项目,支持全球超过 240 个国家和地区的电话号码处理。以下是关于如何使用 phonenumbers
库的详细说明和示例。在使用 phonenumbers
之前,需要先安装它。可以通过 pip 命令进行安装:
pip install phonenumbers
phonenumbers
库的核心功能之一是解析电话号码。它可以从字符串中提取电话号码并将其转换为标准化的 PhoneNumber
对象。
import phonenumbers
# 解析电话号码
number = phonenumbers.parse("+861012345678", "CN") # "CN" 表示中国
# 输出解析后的信息
print(f"国家代码: {number.country_code}") # 输出: 86
print(f"国内号码: {number.national_number}") # 输出: 1012345678
print(f"是否有效: {phonenumbers.is_valid_number(number)}") # 输出: True
phonenumbers
提供了多种格式化选项,可以将电话号码格式化为国际格式、国家格式、本地格式等。
import phonenumbers
# 解析电话号码
number = phonenumbers.parse("+861012345678", "CN")
# 格式化电话号码
print(phonenumbers.format_number(number, phonenumbers.PhoneNumberFormat.INTERNATIONAL)) # 输出: +86 10 12345678
print(phonenumbers.format_number(number, phonenumbers.PhoneNumberFormat.NATIONAL)) # 输出: 010-12345678
print(phonenumbers.format_number(number, phonenumbers.PhoneNumberFormat.E164)) # 输出: +861012345678
phonenumbers
提供了验证电话号码的功能,可以检查电话号码是否有效或可能有效。
import phonenumbers
# 解析电话号码
number = phonenumbers.parse("+861012345678", "CN")
# 验证电话号码
print(f"是否有效: {phonenumbers.is_valid_number(number)}") # 输出: True
print(f"是否可能有效: {phonenumbers.is_possible_number(number)}") # 输出: True
phonenumbers
还可以用于从文本中提取电话号码。这对于从用户输入或文档中提取电话号码非常有用。
import phonenumbers
from phonenumbers import PhoneNumberMatcher
def extract_phone_numbers(text):
numbers = []
for match in PhoneNumberMatcher(text, "CN"): # "CN" 表示中国电话号码
numbers.append(match.number)
return numbers
# 示例文本
text = "我在北京的电话号码是:+861234567890,我的手机号码是:18812345678,请随时联系我。"
# 提取电话号码
phone_numbers = extract_phone_numbers(text)
print(phone_numbers)
phonenumbers
还可以用于获取电话号码的地理位置和运营商信息。
import phonenumbers
from phonenumbers import geocoder, carrier
# 解析电话号码
number = phonenumbers.parse("+861012345678", "CN")
# 获取地理位置
location = geocoder.description_for_number(number, "en")
print(f"地理位置: {location}") # 输出: China
# 获取运营商信息
service_provider = carrier.name_for_number(number, "en")
print(f"运营商: {service_provider}") # 输出: China Mobile
phonenumbers
可以与 `