phonenumbers,一个强大的 Python 库!

news2024/11/15 13:50:04

1ce4b4241d2a9695fe681ce2dc30d4d0.png

更多Python学习内容:ipengtao.com

大家好,今天为大家分享一个强大的 Python 库 - phonenumbers。

Github地址:https://github.com/daviddrysdale/python-phonenumbers


在现代应用程序中,处理和验证电话号码是一项常见的需求。无论是用户注册、订单提交还是客服系统,准确处理电话号码都有助于提升用户体验和业务效率。Python的phonenumbers库是一个功能强大的工具,用于解析、格式化、验证和标准化国际电话号码。本文将详细介绍phonenumbers库,包括其安装方法、主要特性、基本和高级功能,以及实际应用场景,帮助全面了解并掌握该库的使用。

安装

要使用phonenumbers库,首先需要安装它。可以通过pip工具方便地进行安装。

以下是安装步骤:

pip install phonenumbers

安装完成后,可以通过导入phonenumbers库来验证是否安装成功:

import phonenumbers
print("phonenumbers库安装成功!")

特性

  1. 解析:能够解析各种格式的国际电话号码。

  2. 格式化:提供多种格式选项,输出用户友好的电话号码。

  3. 验证:能够验证电话号码的有效性,包括格式和存在性验证。

  4. 标准化:将电话号码标准化为国际格式,便于统一管理。

  5. 地理信息:能够获取电话号码的地理信息,如国家和地区。

基本功能

解析电话号码

使用phonenumbers库,可以方便地解析国际电话号码。

以下是一个简单的示例:

import phonenumbers

# 解析电话号码
number = phonenumbers.parse("+14155552671", None)
print("解析后的电话号码:", number)

格式化电话号码

phonenumbers库提供了多种格式化选项,可以输出不同格式的电话号码。

以下是一个示例:

import phonenumbers

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

# 国际格式
international_format = phonenumbers.format_number(number, phonenumbers.PhoneNumberFormat.INTERNATIONAL)
print("国际格式:", international_format)

# 国家格式
national_format = phonenumbers.format_number(number, phonenumbers.PhoneNumberFormat.NATIONAL)
print("国家格式:", national_format)

# E.164格式
e164_format = phonenumbers.format_number(number, phonenumbers.PhoneNumberFormat.E164)
print("E.164格式:", e164_format)

验证电话号码

phonenumbers库能够验证电话号码的有效性。

以下是一个验证电话号码的示例:

import phonenumbers

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

# 验证电话号码
is_valid = phonenumbers.is_valid_number(number)
print("电话号码是否有效:", is_valid)

# 检查可能性
is_possible = phonenumbers.is_possible_number(number)
print("电话号码是否可能:", is_possible)

高级功能

获取地理信息

phonenumbers库能够获取电话号码的地理信息。

以下是一个获取地理信息的示例:

import phonenumbers
from phonenumbers import geocoder

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

# 获取地理信息
location = geocoder.description_for_number(number, "en")
print("电话号码的地理信息:", location)

获取运营商信息

phonenumbers库能够获取电话号码的运营商信息。

以下是一个获取运营商信息的示例:

import phonenumbers
from phonenumbers import carrier

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

# 获取运营商信息
carrier_info = carrier.name_for_number(number, "en")
print("电话号码的运营商信息:", carrier_info)

短信和MMS信息

phonenumbers库还支持获取电话号码是否支持短信和MMS。

以下是一个示例:

import phonenumbers
from phonenumbers import phonenumberutil

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

# 检查是否支持短信
can_send_sms = phonenumberutil.can_send_sms(number)
print("是否支持短信:", can_send_sms)

# 检查是否支持MMS
can_send_mms = phonenumberutil.can_send_mms(number)
print("是否支持MMS:", can_send_mms)

实际应用场景

用户注册和验证

在用户注册和验证过程中,phonenumbers库可以帮助确保输入的电话号码格式正确,并且是有效的。假设在开发一个用户注册系统,需要验证用户输入的电话号码,可以使用phonenumbers库实现这一功能。

import phonenumbers
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/register', methods=['POST'])
def register():
    phone_number = request.form['phone_number']
    try:
        number = phonenumbers.parse(phone_number, None)
        if phonenumbers.is_valid_number(number):
            return jsonify({"status": "success", "message": "电话号码有效"})
        else:
            return jsonify({"status": "error", "message": "电话号码无效"})
    except phonenumbers.NumberParseException:
        return jsonify({"status": "error", "message": "电话号码格式错误"})

if __name__ == '__main__':
    app.run()

短信和通知服务

在短信和通知服务中,phonenumbers库可以帮助格式化和验证电话号码,确保消息发送成功。假设在开发一个短信通知系统,需要确保电话号码格式正确,可以使用phonenumbers库实现这一功能。

import phonenumbers
from twilio.rest import Client

def send_sms(phone_number, message):
    try:
        number = phonenumbers.parse(phone_number, None)
        if phonenumbers.is_valid_number(number):
            client = Client("ACCOUNT_SID", "AUTH_TOKEN")
            client.messages.create(
                to=phonenumbers.format_number(number, phonenumbers.PhoneNumberFormat.E164),
                from_="你的Twilio号码",
                body=message
            )
            return "短信发送成功"
        else:
            return "无效的电话号码"
    except phonenumbers.NumberParseException:
        return "电话号码格式错误"

# 示例
result = send_sms("+14155552671", "这是一条测试短信")
print(result)

客服系统

在客服系统中,phonenumbers库可以帮助获取电话号码的地理和运营商信息,提高客服效率。假设在开发一个客服系统,需要获取用户电话号码的地理和运营商信息,可以使用phonenumbers库实现这一功能。

import phonenumbers
from phonenumbers import geocoder, carrier

def get_phone_info(phone_number):
    try:
        number = phonenumbers.parse(phone_number, None)
        if phonenumbers.is_valid_number(number):
            location = geocoder.description_for_number(number, "en")
            carrier_info = carrier.name_for_number(number, "en")
            return {
                "status": "success",
                "location": location,
                "carrier": carrier_info
            }
        else:
            return {"status": "error", "message": "无效的电话号码"}
    except phonenumbers.NumberParseException:
        return {"status": "error", "message": "电话号码格式错误"}

# 示例
info = get_phone_info("+14155552671")
print(info)

总结

phonenumbers库是一个功能强大且易于使用的工具,能够帮助开发者处理和验证国际电话号码。通过支持解析、格式化、验证、标准化和获取地理和运营商信息,phonenumbers库能够满足各种电话号码处理需求。本文详细介绍了phonenumbers库的安装方法、主要特性、基本和高级功能,以及实际应用场景。希望本文能帮助大家全面掌握phonenumbers库的使用,并在实际项目中发挥其优势。无论是在用户注册、短信通知还是客服系统中,phonenumbers库都将是一个得力的工具。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!


如果想要系统学习Python、Python问题咨询,或者考虑做一些工作以外的副业,都可以扫描二维码添加微信,围观朋友圈一起交流学习。

496f1aec877aa4ae990073aed9a6d1dc.gif

我们还为大家准备了Python资料和副业项目合集,感兴趣的小伙伴快来找我领取一起交流学习哦!

2c9665433e8d1fe1bc87ba1efb0078ac.jpeg

往期推荐

历时一个月整理的 Python 爬虫学习手册全集PDF(免费开放下载)

Python基础学习常见的100个问题.pdf(附答案)

学习 数据结构与算法,这是我见过最友好的教程!(PDF免费下载)

Python办公自动化完全指南(免费PDF)

Python Web 开发常见的100个问题.PDF

肝了一周,整理了Python 从0到1学习路线(附思维导图和PDF下载)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1699250.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytorch深度学习实践笔记5(b站刘二大人)

🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:pytorch深度学习 🎀CSDN主页 发狂的小花 🌄人生秘诀:学习的本质就是极致重复! 视频来自【b站刘二大人】 目录 1 Linear Regress…

Windows Subsystem for Linux (WSL)查看在线发行版并在终端安装

在 Windows Subsystem for Linux (WSL) 中,你可以使用以下命令来查看在线可用的 Linux 发行版: 列出可用的 Linux 发行版: 使用以下命令查看可以通过在线商店获取的 Linux 发行版列表: wsl --list --online或者,你也可…

一个月速刷leetcodeHOT100 day11 链表完全解析 以及链表5道easy题

链表 表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包活两个部分:一…

二十九篇:构建未来:信息系统的核心框架与应用

构建未来:信息系统的核心框架与应用 1. 引言 在这个充满挑战和机遇的信息时代,信息系统已经成为现代组织不可或缺的神经中枢。它们不仅革新了我们处理信息的方式,更是极大地增强了决策制定的效率和质量。在这篇文章中,我将分享我…

基于PID的单片机温度控制系统设计

基于PID的温度控制系统设计 摘要 温度是工业上最基本的参数,与人们的生活紧密相关,实时测量温度在工业生产中越来越受到重视,离不开温度测量所带来的好处,因此研究控制和测量温度具有及其重要的意义。 本设计介绍了以AT89C52单片…

kubenetes中K8S的命名空间状态异常强制删除Terminating的ns

查看ns状态为异常: 查看ns为monitoring的状态为Termingating状态 使用方法一: kubectl delete ns monitoring --force --grace-period0 使用方法二: kubectl get ns monitoring -o json > monitoring.json 修改删除文件中的"kubern…

Docker快速搭建Oracle服务

服务器:CentOS7.9 1.安装docker yum install -y docker 2. 设置镜像加速 修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值 阿里云的docker镜像需要自己注册账号,也可以不注册账号,直接使用下面的连接。 也可以写入多…

深度学习中的多GPU训练(Pytorch 20)

一 多GPU训练 下面详细介绍如何从零开始并行地训练网络,这里需要运用小批量随机梯度下降算法。后面我还讲介绍如何使用高级API并行训练网络。 我们从一个简单的计算机视觉问题和一个稍稍过时的网络开始。这个网络有多个卷积层和汇聚层,最后可能 有几个…

AGI系列(1):掌握AI大模型提示词优化术,提问准确率飙升秘籍

当我们向AI大模型提问时,通常人们的做法是有什么问题,就直接去问,得到大模型的回复结果,时好时坏,完全没有可控性。 那么有没有一种方式或是一套方法,可以让我们向大模型提问时,得到的结果更准确…

怎么在网上赚点零花钱?分享十个正规的赚钱兼职平台

亲爱的朋友们,大家好!今天要和大家聊聊一个让人兴奋的话题——网上赚钱。在这个互联网飞速发展的时代,网上赚钱已经不再是遥不可及的梦想。如果你正想在网上赚点零花钱,那么这篇文章你可不能错过! 在这个信息爆炸的时代…

Linux系统命令traceroute详解(语法、选项、原理和实例)

目录 一、traceroute概述 二、语法 1、基本语法 2、命令选项 三、帮助信息 四、示例 1. 使用默认模式(ICMP Echo)追踪到目标主机 2. 使用UDP模式(需要root权限)追踪到目标主机 3. 不解析IP地址为主机名,直接显…

STL库 —— unordered_set与unordered_map的封装

这里要对 unordered_set 与 unordered_map 进行封装,封装时使用的是上一篇中学的 HashBucket 。不仅要完成封装,同时要写入迭代器。 一、HashBucket 的修改 1.1 节点的修改 T 首先来认识一下使用 unordered_set 和 ordered_map 时的区别: …

基于物联网架构的电子小票服务系统

1.电子小票物联网架构 采用感知层、网络层和应用层的3层物联网体系架构模型,电子小票物联网的架构见图1。 图1 电子小票物联网架构 感知层的小票智能硬件能够取代传统的小票打印机,在不改变商家原有收银系统的前提下,采集收音机待打印的购物…

SDK——如何快速上手一个接口驱动任务(以iic为例)

如何快速上手一个接口驱动任务:(这里以iic为例) 文章目录 一、注意这里有一些基本概念需要知道:1.关于主从模式的选择(以iic为例)2.关于外设的中断模式(intr)和轮询模式(polled)2.1…

【学习心得】回归任务的评估指标决定系数R^2

一、决定系数是什么? scikit-learn库在进行回归任务的时候,进行模型评估时的score()方法,默认采取的是计算的是决定系数(Coefficient of Determination),通常表示为得分。这个值衡量了模型预测值与实际观测…

系统思考—问题分析与持续改进

刚刚为一家500强企业完成了《系统思考—问题分析与持续改进》的课程。学员们开始意识到,不能仅仅停留在冰山上层事件去解决问题,而是要深入观察隐藏在背后的趋势变化。学会如何识别系统中的深层次原因,并从全局视角来制定更加有效的改进策略。…

DockerNetwork

Docker Network Docker Network 是 Docker 引擎提供的一种功能,用于管理 Docker 容器之间以及容器与外部网络之间的网络通信。它允许用户定义和配置容器的网络环境,以便容器之间可以相互通信,并与外部网络进行连接。 Docker Network 提供了以…

vulnhub靶场之FunBox-8

一.环境搭建 1.靶场描述 Its a box for beginners and can be pwned in the lunch break. This works better with VirtualBox rather than VMware 2.靶场下载 Funbox: Lunchbreaker ~ VulnHub 3.靶场启动 二.信息收集 1.寻找靶场真实IP地址 nmap -sP 192.168.2.0/24 arp-…

正运动控制器:视觉纠偏和找孔

一、用户主界面CCD参数设置 通过主界面CCD参数设置,学习如何操作计算相机中心与电批中心的偏移量,以及相机标定的功能。 1、相机中心与电批中心的偏移量计算 1.1、在用户主界面点击CCD参数按钮,进入CCD设置界面。 主界面 CCD参数设置界面 1…

Python中tkinter入门编程9

在《Python中tkinter编程入门8-CSDN博客》中提到,tkinter中的Canvas表示画布,可以在画布中显示文字和图片。除了以上功能外,还可以在Canvas中添加对鼠标或键盘的响应。 1 为Canvas添加事件响应 可以通过Canvas的bind()方法添加对鼠标或键盘…