骨肉瘤早期

首页 » 常识 » 问答 » 优雅地整理分析数据中的电话号码,只需一
TUhjnbcbe - 2025/2/24 18:31:00

大家好,欢迎收看思路实验室出品的Python入门教程,我是室长。

今天室长再给大家带来一个非常实用的有助于数据清洗小模块。

我们都知道电话号是一串数字,但就是这一串数字还是有不同的写法的。比如这个手机号:,直接这样写是没问题的,如果想让别人不至于因数字太多而眼花缭乱,也可以写成或者--。如果涉及国际电话,这样就不行了,还需要在号码前边加上中国的国际区号+86,即+865。

这些不同的写法实际上都代表着同一个电话号码,但如果我们直接获取了不同写法的电话号码字符串,那么Python不会认为这是同一个东西,我们需要对电话号码字符串进行解析。而phonenumbers模块可以快速地帮我们解析电话号码并将其转化为指定的格式。

首先我们还是安装一下phonenumbers模块,安装名和导入名都一样。因为名字太长,我们不妨重命名为pn:

解析电话号码,我们需要使用parse方法。prase方法主要接受两个参数,第一个自然是电话号码字符串,第二个则是区域代码。在某些情况下,phonenumbers模块不能仅凭电话号码判断出所属国家,所以需要填写一下区域代码,例如中国的区域代码就是CN:

看起来没啥区别,我们把电话号码换一种写法:

这就看出来效果了。如果这个电话号码带有国家区号,那我们也可以不加区域代码:

如果我们把两种写法进行一个比对呢?

可以看到这两种写法已经被phonenumbers认为是同一个东西了。

除了这种电话号码字符串之外,我们还可能会遇到一段长的文本里有一个或多个电话号码的情况。如何把文本中的电话号码“抠”出来?phonenumbers中有一个PhoneNumberMatcher类可以完美地达成我们的目标:

PhoneNumberMatcher的用法也很简单,只要把文本和电话号所在的国家输入就可以了,和parse方法的使用差不多。当然因为匹配的结果可能不止一个,我们需要用循环来将结果打印出来。需要注意的是打印出的结果是一个PhoneNumberMatch对象,它包含了电话号码在文本中的位置。如果我们想获得像parse方法那样得到的结果,可以访问这个对象的number属性:

现在不同格式的电话号码转换成了同一种数据,那我们就可以从这一种数据生成我们所需要的电话格式。需要使用的是format_number方法:

format_number方法的使用同样很简单,第一个参数是解析后的电话号码,第二个参数是电话号码格式。在PhoneNumberFormat中有几种电话号码格式的预设。经过这番操作我们就可以将杂乱的电话号码信息整理得工工整整。

你以为这就结束了?不!phonenumbers还有更加逆天的功能!它可以分析出电话号码的归属地、运营商以及所在时区!

我们先来看区域分析。区域分析需要使用geocoder子模块,调用description_for_number方法:

description_for_number方法也是需要两个参数,第一个自然是电话号数据,而第二个是语言编号,即这个归属地用哪种语言表示出来,注意不要和国家缩写搞混。"zh"代表中文,如果我们换成代表英文的"en",结果会如何?

接下来是运营商分析,需要使用carrier子模块,调用name_for_number方法,具体参数和归属地是一样的:

最后是时区分析,需要使用timezone子模块,调用time_zones_for_number方法。不过这个方法返回的是时区信息,不需要设置语言,所以只传入

这三个子模块可以帮助我们进一步分析电话号码数据并进行更好的展示。不过因为涉及到地区、运营商、时区等大量数据的查询,这三个子模块会占用大量内存和磁盘空间。如果在业务中不需要这些分析,也可以选择安装轻量版的phonenumberslite模块。希望今天给大家带来的phonenumbers模块能够帮助大家更快更好地分析处理数据。如果这篇文章对你有所帮助,希望能帮室长点个赞和在看,你的鼓励是室长进步的动力!

1
查看完整版本: 优雅地整理分析数据中的电话号码,只需一