Python 中的 Phonenumbers 模块

machine learningpythonserver side programming

简介

使用 Python phonenumbers 包可以更轻松地解析、格式化和验证电话号码。此模块为开发人员提供了一套强大的工具,以标准化方式处理电话号码,因为它基于 Google 的 libphonenumber 包。phonenumbers 模块可以从用户输入中提取电话号码,验证其准确性,并根据国际标准对其进行格式化。

在这篇文章中,我们将研究 phonenumbers 模块提供的众多功能和能力,并进入实际应用程序以展示如何使用它们。我们将探索此模块的功能,并解释它如何使 Python 应用程序中的电话号码处理更简单,从解析和验证到格式化和提取关键信息。

Python 中的 Phonenumbers 模块实现

安装和导入

必须先安装 phonenumbers 模块并将其加载到我们的 Python 环境中,然后我们才能探索其功能。使用 Python 的软件包安装程序 pip 可以设置该模块。安装后,我们可以使用 import 语句将 phonenumbers 模块添加到我们的交互式 Python 会话或脚本中。

示例

pip install phonenumbers import 
phonenumbers 

输出

Looking 	in 	indexes: 	https://pypi.org/simple, 	https://us-python.pkg.dev/colabwheels/public/simple/ 
Collecting phonenumbers 
  Downloading phonenumbers-8.13.11-py2.py3-none-any.whl (2.6 MB) 
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.6/2.6 
MB 37.6 MB/s eta 0:00:00 
Installing collected packages: phonenumbers 
Successfully installed phonenumbers-8.13.11 

解析电话号码

phonenumbers 模块的主要任务之一是从各种字符串表示中解析电话号码。无论电话号码是否带有国家代码、是否带有破折号或空格,模块提供的 parse() 函数都可以智能地解释和解析电话号码。解析后的电话号码对象包含有价值的信息,例如国家代码、国内号码、分机号等。

示例

import phonenumbers

# 解析电话号码 number = "+14155552671"
parsed_number = phonenumbers.parse(number,
None)

# 访问解析信息
print(parsed_number.country_code) # 输出:1
print(parsed_number.national_number) # 输出:4155552671
print(parsed_number.extension) # 输出:无

输出

1 
4155552671 
None 

电话号码验证

验证电话号码对于确保其符合正确格式且可能可接通至关重要。phonenumbers 模块提供各种验证方法来检查电话号码是否有效或可能。is_valid_number() 函数根据其语法和结构确定电话号码是否有效。另一方面,is_possible_number() 函数检查电话号码是否可能有效,这意味着它具有有效的国家代码,但可能不一定符合有效号码的所有规则。

示例

import phonenumbers

# 验证电话号码
valid_number = "+14155552671" invalid_number
= "+1234567890"

print(phonenumbers.is_valid_number(phonenumbers.parse(valid_number))) # 输出:True
print(phonenumbers.is_valid_number(phonenumbers.parse(invalid_number))) # 输出:False

print(phonenumbers.is_possible_number(phonenumbers.parse(valid_number)))
# 输出:True
print(phonenumbers.is_possible_number(phonenumbers.parse(invalid_number))) #
输出:True

输出

True
False
True
False

格式化电话号码

在向人们展示电话号码或将其保存在数据库中之前,一致且统一地格式化电话号码至关重要。为了保证电话号码显示正确,phonenumbers 模块提供了许多格式化选项。

您可以使用 format_number() 方法按照多种样式格式化已解析的电话号码,包括国际格式、国家格式和 E.164 格式。国家格式只提供国家有效号码,不提供国家代码,但国际格式还包括国家代码。国家代码和国家有效号码包含在 E.164 格式中,该格式是标准化的,不使用任何格式化符号。

示例

import phonenumbers

# 格式化电话号码
parsed_number = phonenumbers.parse("+14155552671")

# 格式化为国际格式 
print(phonenumbers.format_number(parsed_number, phonenumbers.PhoneNumberFormat.INTERNATIONAL))

# 格式化为国家格式
print(phonenumbers.format_number(parsed_number, phonenumbers.PhoneNumberFormat.NATIONAL))

# 格式化为 E.164 格式
print(phonenumbers.format_number(parsed_number, phonenumbers.PhoneNumberFormat.E164)) 

输出

+1 415-555-2671 
(415) 555-2671 
+14155552671 

从电话号码中提取信息

您可以使用 phonenumbers 模块从电话号码中收集重要数据。例如,您可以使用 geocoder 模块(phonenumbers 子模块)来确定电话号码的位置。当您需要知道电话号码属于哪个国家、地区或运营商时,此功能在应用程序中非常有用。

示例

import phonenumbers from
phonenumbers import geocoder

# 解析电话号码 number = "+14155552671" parsed_number = phonenumbers.parse(number, None)

# 检索地理信息 location = geocoder.description_for_number(parsed_number, "en")
print(location) # 输出:美国

输出

加利福尼亚州旧金山

高级用法:地理编码和运营商查找

借助 phonenumbers 模块的复杂功能(如运营商查找和地理编码),您可以了解有关电话号码的更多信息。地理编码器子模块提供用于定位与电话号码相关的国家、地区和运营商的工具。

可以使用运营商子模块的功能找到电话号码的运营商或服务提供商。需要特定于运营商的功能或必须验证运营商数据的应用程序可能会发现这很方便。

示例

import phonenumbers from phonenumbers 
import geocoder, carrier 
 
# 解析电话号码 number = "+14155552671"
parsed_number = phonenumbers.parse(number,None)

# 检索运营商信息 carrier_name = carrier.name_for_number(parsed_number, "en")
print(carrier_name) # 输出:AT&T Mobility

# 检索地理信息 location = geocoder.description_for_number(parsed_number, "en")
print(location) # 输出:美国

输出

'***' # cannot be disclosed 
San Francisco, CA 

处理国际电话号码

phonenumbers 模块还提供处理国际电话号码的功能。它允许您确定电话号码的地区或国家,并根据该地区的惯例对其进行格式化。这在处理来自不同国家的电话号码时特别有用。

示例

import phonenumbers

# 解析电话号码 number = "+353876543210"
parsed_number = phonenumbers.parse(number, None)

# 获取区域信息
region = phonenumbers.region_code_for_number(parsed_number) 
print(region)  # 

输出

IE

定制和本地化

Python 的 phonenumbers 模块提供了定制可能性,以满足独特的需求。通过创建新信息或导入特定位置的元数据,您可以改变模块的行为方式。这使您能够管理通常的元数据可能无法处理的电话号码。您可以通过提供其他信息来扩展模块的功能,以支持特殊的电话号码格式或编号方案。

此外,phonenumbers 模块支持本地化,使您能够以不同的语言和格式显示电话号码。您可以在格式化电话号码时指定所需的语言,确保输出符合指定语言的约定。此本地化功能在具有全球用户群的应用程序中特别有用,因为它通过以熟悉且适合每个地区的格式呈现电话号码来增强用户体验。

最佳实践和注意事项

处理敏感用户数据时必须考虑隐私和安全问题。遵守适用的数据保护法并采取必要的预防措施来保护电话号码。采取适当的预防措施以防止滥用或非法访问电话号码信息。

结论

Python 中的 phonenumbers 模块是一个强大而方便的工具,用于解析、验证、格式化和管理电话号码。它具有广泛的功能,包括解析各种格式的电话号码、验证其正确性以及执行地理编码和运营商查找等高级操作,使其成为处理电话号码的应用程序的宝贵资产。凭借对国际电话号码、自定义选项和本地化功能的支持,phonenumbers 模块为电话号码管理提供了全面的解决方案。通过利用此模块,开发人员可以确保在其 Python 项目中准确一致地处理电话号码,从而增强功能、用户体验和数据完整性。


相关文章