Python手机号码匹配

今天实战,从8000多个全国手机号码中筛选出北京地区的手机号码。

我们会学习python读取excel和csv文件,对两个文件数据对比。两个数据文件均为随机生成,文末为下载地址。

两个数据文件其中numbers_virtual.csv是手机号码表,segment_virtual.xlsx是号段表,用于标示北京地区。 手机号码编码规则是前3位用于标识运营商,如133表示电信,136表示移动,186表示联通;手机号中4-7位标识地区。

先打开两个文件观察一下:

%e5%8f%b7%e7%a0%81

Windows开始菜单–命令行中‘cmd’–‘jupyter notebook’–’File‘-’New Notebook’,这就完成了新建。因为我把这两个数据文件放在D盘python文件夹下,所以需要先修改一下工作路径:

cd d:\python

两个文件先读哪个?先理一下思路,对手机号码切片,再在号段表里匹配看有没有,所以我们先得有号段表——先读号段表。python有专门的库xlrd读excel文件,就像csv文件一样。

import xlrd

 data = xlrd.open_workbook('segment_virtual.xlsx')
 table = data.sheets()[0]
 cols = table.col_values(0)

xlrd.open_workbook(‘segment_virtual.xlsx’)打开excel表格; data.sheets()[0]读取其中的sheet,这里中括号里用了0表示是第一个sheet; table.col_values(0)用来读取sheet里的列,我们取第1列。如果想知道cols个什么类型,可用print打印,发现是unicode格式的列表。

接下来读号码表

users = []  

import csv
with open('numbers_virtual.csv','rb') as f:
reader = csv.reader(f)
for i in reader:
    users.append(i[0])

这里不过多解释,和之前文章一样。需要说明的是 users.append(i[0])这句,这里用了i[0],因为i是一个含有单元素的列表,所以我们用[0]把它取出来,再放到users这个列表里。

接下来做匹配,如果users里面的每个号码自身第4-7位这个4位数,在cols这个号段表里能找到,那么就打印这个号码:

for number in users:
     segment = number[3:7]
     if segment in  cols:
        print number

这样我们就从全国拿出了北京地区的用户,同样的方法还可以拿出北京地区移动用户,这个留作练习。

两个数据文件下载地址链接: 链接: http://pan.baidu.com/s/1qYw8CCO 密码: zi4g

最后贴下随机生成11位手机号码的代码:

def createPhone():
     prelist=["130","131","132","133","134","135","136","137","138","139","147","150","151","152","153","155","156","157","158","159","186","187","188"]
     return random.choice(prelist)+"".join(random.choice("0123456789") for i in range(8))

 numbers = []
 for i in range(100000):
     numbers.append(createPhone())

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注