Python Phonenumbers 模块
每当我们看到陌生的电话号码或收到陌生号码的来电时,我们脑海中都会出现一些基本问题,包括谁在打电话,来自何处,电话号码的区域,电话号码是否有效等等。如果我们必须手动找到所有这些问题的答案,那么会花费一些时间,因为我们不能同时执行所有操作。例如,要知道电话号码的区域,我们必须对每个国家的国际电话区号有一个概念,这在实践中是不可能的(除了一些例外)。同样,如果我们必须手动检查给定的电话号码是否有效,则必须拨打该号码,如果有成百上千个这样的号码怎么办。因此,手动执行此类操作非常繁琐和耗时,这就是为什么我们必须寻找替代解决方案的原因。许多编程语言为我们提供了扩展或包以在给定的电话号码上执行这些操作。
Python是最流行的编程语言之一,它为我们提供了非常有用的phonenumbers模块,可以使用程序执行所有这些操作。因此,在本教程中,我们将学习使用Python的phonenumbers模块,并使用该模块在示例程序中执行多个此类操作。
Python的Phonenumbers模块介绍
Phonenumbers是一个Python模块,具有解析电话号码等多个功能。Python的Phonenumbers模块具有多个函数,可以对给定的电话号码执行各种操作,比如查找电话号码的区域,电话号码的运营商等等。我们可以通过将该模块导入到程序中来在Python程序中使用phonenumbers模块的函数,然后我们可以使用这些函数对给定的电话号码执行所需的操作。Phonenumbers模块在许多方面对我们非常有帮助,其中包括以下几个优点:
- 该模块节省了我们大量的工作
- 该模块节省了对电话号码执行操作的时间
- 我们可以使用phonenumbers模块一次执行多个操作
- 我们甚至可以使用该模块一次对多个电话号码执行操作
这些是在Python程序中使用phonenumbers模块的几个突出优势。我们将通过示例程序对给定的电话号码执行多个此类操作,从而了解phonenumbers模块的实现。在本节中,我们还将执行phonenumbers模块的安装过程。
Python的Phonenumbers模块:安装
Phonenumbers不是Python的内置包(它不会随着Python安装而被安装),因此如果系统中没有安装此模块,我们必须安装该模块。在执行实施之前,我们应首先确保phonenumbers模块是否已安装在系统中,因为如果在系统中没有此模块,我们将无法执行实施。如果系统中未安装phonenumbers模块,我们有多种方法可以安装此模块,而在所有可能的安装方法中,使用pip安装程序安装phonenumbers模块是最简单和最容易的方法。那就是为什么我们将在本教程中使用pip安装程序将phonenumbers模块安装在我们的系统中,而在此方法中,我们将使用以下pip安装程序命令:
pip install phonenumbers
我们必须在命令提示符终端中输入上述命令,并在输入命令后按回车键,这样pip安装程序就会开始在我们的系统中安装此模块。一旦这个模块的安装过程开始,就需要一些时间才能成功地将模块安装在我们的系统中,我们必须等待直到完成。
正如我们所看到的,成功安装的消息显示在屏幕上,这意味着phonenumbers模块现在已成功安装在我们的系统中。现在,我们可以通过将其导入示例Python程序并了解其实现来开始使用phonenumbers模块。
Python的Phonenumbers模块:实现
如我们已经讨论的,我们可以使用phonenumbers模块的函数在Python程序中执行多个操作。我们将在本部分中使用phonenumbers模块的函数执行多个此类操作,以了解该模块的实现。我们将使用phonenumbers模块的函数执行以下操作,以了解其实现:
- 知道电话号码所属地区
- 知道电话号码的时区
- 知道电话号码的运营商
- 将字符串变量转换为电话号码格式
- 匹配和提取电话号码
- 验证电话号码
我们将在本部分中使用phonenumbers模块的函数在示例程序中执行上述所有操作,以了解其实现和工作原理。
应用1:知道电话号码的地区
我们可以知道给定电话号码所属的地区,即我们可以找出给定电话号码属于哪个国家或哪个地区。phonenumbers模块的Geocoder库为我们提供了description_for_number()函数,我们可以使用该函数来查找给定电话号码的地区。我们可以通过将电话号码作为参数传递给该函数,并将电话号码的地区作为结果打印到输出中。我们可以通过以下示例程序了解phonenumbers模块的description_for_number()函数的实现。
示例1: 查看以下程序,我们在输出中打印了给定电话号码的地区:
# Importing phonenumbers module
import phonenumbers as pn
# Importing geocoder library from the phonenumbers module
from phonenumbers import geocoder as gc
# Parsing a given phone number
givenPN = pn.parse("+919034xxxxxx")
# Using parse phone number for finding region
regionOfPN = gc.description_for_number(givenPN, 'en')
# Printing region as the result
print("The region of the given phone number is: ", regionOfPN)
输出:
The region of the given phone number is: India
正如我们所看到的,在输出中打印了给定电话号码的地区,这就是我们可以找出和打印出任何给定电话号码的地区的方式。处于安全和个人原因,我们隐藏了示例中使用的电话号码的最后六位数字。
说明:
在将phonenumbers模块导入为pt之后,我们导入了phonenumbers模块的geocoder库作为gc。之后,我们解析了给定的电话号码并将结果存储在初始化的变量(givenPN)中,以便将其用作description_for_number()函数的参数。然后,我们在description_for_number()中使用解析后的号码变量作为参数,并将结果存储在第二个初始化的变量中。在description_for_number()函数内部,我们还使用了’en’语言来指定英语以用于打印和存储结果。最后,我们使用regionOfPN变量在输出中打印结果。
应用2:查找给定电话号码的运营商:
我们甚至可以使用phonenumbers模块找出给定电话号码属于哪个SIM卡运营商。phonenumbers模块的carrier库通过name_for_number()函数提供了查找电话号码的运营商的选项。在carrier库的name_for_number()函数中,我们必须使用解析后的电话号码作为参数,然后可以在输出中打印给定电话号码的运营商。我们可以通过以下示例程序来了解phonenumbers模块的name_for_number()函数的实现。
示例2:
看一下以下Python程序,我们打印了给定电话号码的SIM卡运营商:
# Importing phonenumbers module
import phonenumbers as pn
# Importing carrier library from the phonenumbers module
from phonenumbers import carrier as cr
# Parsing a given phone number
givenPN = pn.parse("+919034xxxxxx")
# Using parse phone number for finding the carrier
carrierOfPN = cr.name_for_number(givenPN, 'en')
# Printing carrier as the result
print("The SIM Card operator or carrier of the given phone number is: ", carrierOfPN)
输出:
The SIM Card operator or carrier of the given phone number is: Tata Docomo
如我们所见,给定电话号码的运营商是输出中打印出来的,这是我们可以找到并打印出任何给定电话号码的SIM卡运营商的方法。
解释:
我们在name_for_number()函数中使用了解析后的电话号码变量来找到运营商,最后,我们通过使用结果变量,即carrierOfPN变量,在打印语句中将程序的结果打印在输出中。
应用3:解析给定的电话号码
解析给定的电话号码意味着将给定的电话号码按照phonenumbers模块的格式进行设置。我们可以使用phonenumbers模块的parse()函数来执行此操作,通过在函数中提供电话号码作为参数,该函数将通过在输出中以phonenumbers格式提供给定的电话号码来产生结果。我们可以通过以下示例程序了解parse()函数的使用情况,其中我们解析了给定的电话号码。
示例3: 请查看以下程序,我们在其中使用parse()函数来解析电话号码:
# Importing phonenumbers module
import phonenumbers as pn
# Parsing a given phone number
givenPN = pn.parse("+919034xxxxxx")
# Printing the parsed phone number
print("The given phone number after parsed will look like as the following format: ")
print(givenPN)
输出:
The given phone number after parsed will look like as the following format:
Country Code: 91 National Number: 9034xxxxxx
如我们所见,我们已经在程序中解析了给定的电话号码,我们可以使用这个解析函数来解析任何给定的电话号码。
注意:我们必须记住,传递给parse()函数的给定电话号码应该带有其国家代码。
应用4:获取给定电话号码所在区域的时区:
我们甚至可以从给定的电话号码中直接获得所在区域的时区。我们可以使用phonenumbers模块执行此任务,因为phonenumbers模块提供了时区库,用于查找给定电话号码所在区域的时区。 phonenumbers模块的时区库提供了time_zones_for_number()函数,我们可以使用它来查找phonenumber的时区。我们只需要将解析后的电话号码作为参数传递给time_zones_for_number(),然后我们就可以找出电话号码的时区并将结果打印输出。我们可以通过以下示例程序来了解phonenumbers模块的time_zones_for_number()函数的实现。
示例4: 请看下面的Python程序,我们在输出中打印了给定电话号码的时区。
# Importing phonenumbers module
import phonenumbers as pn
# Importing timezone library from the phonenumbers module
from phonenumbers import timezone as tz
# Parsing a given phone number
givenPN = pn.parse("+919034xxxxxx")
# Using parse phone number for finding timezone
timezoneOfPN = tz.time_zones_for_number(givenPN)
# Printing carrier as the result
print("The timezone of the given phone number is: ", timezoneOfPN)
输出:
The timezone of the given phone number is: ('Asia/Calcutta',)
正如我们所看到的,给定电话号码的时区已打印在输出中,这就是我们如何找出并打印任何给定电话号码的时区。
应用5:匹配和提取电话号码:
有时我们会给出多个电话号码,并且我们必须找出其中特定国家代码或地区的电话号码。如果我们手动执行此操作,将会花费很多时间,但借助phonenumbers模块的帮助可以节省很多时间。phonenumbers模块为我们提供了PhoneNumberMatcher对象,该对象具有执行电话号码匹配任务的相关函数。我们可以使用PhoneNumberMatcher()函数与一些给定的电话号码一起过滤出所需的电话号码,然后我们可以在输出中打印它们。我们可以通过以下示例程序来理解phonenumbers模块的实现:
示例5: 请查看下面的Python程序,我们在给定的电话号码上执行了提取和匹配操作:
# Importing phonenumbers module
import phonenumbers as pn
# Defining multiple phone numbers
sampleText = "You can contact us at +919034xxxxxx in daytime or you can reach out us in night with +119876543210"
# Searching for a particular phone number
resultPN = pn.PhoneNumberMatcher(sampleText, "IN")
# Printing result in the output
for desiredPN in resultPN:
print(desiredPN)
输出:
PhoneNumberMatch [23,36) +919034xxxxxx
如我们所见,我们从给定的示例文本中提取了一个特定地区(本例中为印度)的电话号码,并在输出中打印出来。这就是我们如何使用PhoneNumberMatcher对象来匹配和提取给定文本中的特定电话号码。
说明:
在定义了一个示例文本之后(其中我们提到了两个不同地区的电话号码),我们使用了这个sampleText变量在PhoneNumberMatcher()函数中传入”IN”参数,以便它能从示例文本中找出印度地区的电话号码。之后,我们使用for循环遍历resultPN变量并将搜索结果打印到输出中。
应用6:验证电话号码:
我们甚至可以使用phonenumbers模块来检查给定的电话号码是否有效。除此之外,我们还可以检查给定的号码是否可能存在。为了执行这两个任务,phonenumbers为我们提供了两个不同的函数,即is_valid_number()和is_possible_number()。我们可以通过将解析后的电话号码作为参数提供给这些函数来确定给定电话号码的验证和可能性。我们可以通过以下示例程序来了解这两个函数的实现。
示例6: 请查看以下程序,我们在其中验证了并检查了给定号码的可能性:
# Importing phonenumbers module
import phonenumbers as pn
# Parsing a given phone number
givenPN = pn.parse("+919034xxxxxx")
# Validating the parsed number
validNumber = pn.is_valid_number(givenPN)
# Checking possibility of the number
possibleNumber = pn.is_possible_number(givenPN)
# Printing results in the output
print("Is the given phone number is valid?: ", validNumber)
print("Is the given phone number is possible?: ", possibleNumber)
输出:
Is the given phone number is valid?: True
Is the given phone number is possible?: True
正如我们所看到的,给定号码的验证和可能性打印在输出中,这就是我们如何验证和检查任何给定电话号码的可能性。