下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

怎么用Python整理你的通讯录?

作者:纸飞机编程     来源: 今日头条点击数:1004发布时间: 2019-12-11 10:13:47

标签: python视频python视频教程编程语言

大神带你学编程,欢迎选课

Python整理你的通讯录。虽然大多数的语言可以既可被编译又可被解译,但大多数仅在一种情况下能够良好运行。在一些编程系统中,程序要经过几个阶段的编译,一般而言,后阶段的编译往往更接近机器语言。这种常用的使用技巧最早在1960年代末用于BCPL,编译程序先编译一个叫做“0代码”的转换程序(representation),然后再使用虚拟器转换到可以运行于机器上的真实代码。

关于python如何提高我们的生产力,有些人可能到现在还是一头雾水,这里有一个误区是

“python语言要掌握的非常好才能写有用的程序”

其实不一定,我见过很多刚接触编程的人,掌握了基本的东西就开始按照自己的想法写程序用来帮助自己提高生产效率了。更多的时候我们应该发挥自己的想法力去利用手上现有的技术和工具组合起来产生最大的价值。而不是把一门语言学透了才敢说写程序,就跟大家读书的时候早恋一样。老师那会家长说你们这个年纪不懂爱情,不要太早陷进去,结果大家也并没听嘛,还是爱得死去活来乐此不疲的,也没说先去书店买本《如何谈爱恋》的书读透了再开始。

说到底还是动力不足,而我们平时写程序也要考虑一个投入产出比的问题,花最小的代价写程序,去为自己产生更大的价值。

今天我来写一段很少的python代码,用来整理我的联系人信息,简单点说就是我的通讯录里原本只有 联系人姓名,手机号这两个信息,那么我想对每个人做一个信息查询和分类,我希望知道对方是男是女,是哪个地方的人,生成一个Excel表格出来。其实我也可以一个一个手动来分析,但是这样效率太低,如果遇到有几百个上千上万个联系人时,这个工作将变得几乎不可能完成。

现在打开我的google通讯录,开始导出数据,这里我选择了导出格式为CSV的,便于一会处理数据方便。

怎么用Python整理你的通讯录_python视频_python视频教程_编程语言_课课家 

下载之后我有了一个名为contacts.csv的文件,关于csv文件,其实格式很简单,通常采用 逗号分隔 , 用来组合数据,下面我写一个简单的csv文件的范例

文件名:西游记人物属性表.csv

文件内容:

姓名,年龄,性别
monkey sun, 800, 女
pig man, 1200, 男
monks sha, 1000, 男
master tang,999, 男

然后我们可以用任意文本编辑器打开这个文件,看起来像下面这样

 

现在,我们换个工具打开它,比如excel,看看会有什么效果,我在macOS上,所以用的是numbers,不过效果是差不多的。

 

 

现在说回我刚才导出的联系人文件 contacts.csv,因为google导出的数据没用的字段太多,我只想关心人名和电话,所以在这里把表格简单的处理了一下,First Name,Middle Name ,LastName也是老外的习惯,不管它,反正我们把这三个字段的数据拼在一起即可。

 

 

 

好了可以开始写代码了,最初的版本长成下面这样

# 导入csv处理模块
import csv
# 导入网络请求模块
import requests
# 导入性别猜测模块
import ngender

#定义性别字段中英文映射表
gender_map = {
'male':'男',
'female': '女'
}
# 定义输出表头
headers = ['姓名', '性别', '电话', '省份', '城市']

# 定义电话归属地查询api地址
url = 'http://mobsec-dianhua.baidu.com/dianhua_api/open/location?tel={}'

# 打开csv
with open('contacts.csv') as f:
# 用字典的方式读取数据
f_csv = csv.DictReader(f)
# 循环读取每一行数据
for row in f_csv:
# 获取三个字段的名字并进行拼接
first_name = row['First Name']
middle_name = row['Middle Name']
last_name = row['Last Name']
name = f"{last_name}{middle_name}{first_name}"
# 处理电话号码格式(过滤+86,座机号等等内容不做处理)
tel = row['Mobile Phone']
tel = tel if len(tel) == 11 else ''
# 判断联系人如果电话号码存在
if tel:
# 根据联系人姓名获取性别
ret = ngender.guess(name)
people_gender = gender_map.get(ret[0])
# 获取电话归属地
resp = requests.get(url=url.format(tel)).json()
if resp['responseHeader']['status'] == 200:
detail = resp['response'][tel]['detail']
province = detail['province']
city = detail['area'][0]['city']
# 打印姓名性别等信息
print(f'姓名:{name}\\n性别:{people_gender}\\n电话:{tel}\\n省份:{province}\\n城市:{city}\\n')
# 暂停,只显示一条用于教学演示
break

嗯,显示效果如下,我们成功的查出了数据。

 

 

接下来我想把这些数据变成表格,需要再加几行代码处理下,生成一个csv文件出来,代码如下:

# 导入csv处理模块
import csv
# 导入网络请求模块
import requests
# 导入性别猜测模块
import ngender

#定义性别字段中英文映射表
gender_map = {
'male':'男',
'female': '女'
}
# 定义输出表头
headers = ['姓名', '性别', '电话', '省份', '城市']

# 定义电话归属地查询api地址
url = 'http://mobsec-dianhua.baidu.com/dianhua_api/open/location?tel={}'

# 打开csv
with open('contacts.csv') as f:
# 用字典的方式读取数据
f_csv = csv.DictReader(f)
# 循环读取每一行数据
for row in f_csv:
# 获取三个字段的名字并进行拼接
first_name = row['First Name']
middle_name = row['Middle Name']
last_name = row['Last Name']
name = f"{last_name}{middle_name}{first_name}"
# 处理电话号码格式(过滤+86,座机号等等内容不做处理)
tel = row['Mobile Phone']
tel = tel if len(tel) == 11 else ''
# 判断联系人如果电话号码存在
if tel:
# 根据联系人姓名获取性别
ret = ngender.guess(name)
people_gender = gender_map.get(ret[0])
# 获取电话归属地
resp = requests.get(url=url.format(tel)).json()
if resp['responseHeader']['status'] == 200:
detail = resp['response'][tel]['detail']
province = detail['province']
city = detail['area'][0]['city']
# 打印姓名性别等信息
print(f'姓名:{name}\\n性别:{people_gender}\\n电话:{tel}\\n省份:{province}\\n城市:{city}\\n')
# 暂停,只显示一条用于教学演示
break

效果如下:

 

 

整段程序没有做任何优化,连注释信息60行,但是它可以产生很大的用途,因为哪怕是我的联系人有非常多,我也可以用它在很快的时间做完这些信息整理工作,费力的是计算机,不是我,我坐在一旁喝咖啡即可。

在这之后,我们可以就这个例子继续扩充,对联系人进行分组,展示图表之类的,希望大家有所启发。

用到的第三方python库 requests, ngender

可以通过pip安装

pip install requests, ngender

高级语言的出现使得计算机程序设计语言不再过度地依赖某种特定的机器或环境。这是因为高级语言在不同的平台上会被编译成不同的机器语言,而不是直接被机器执行。最早出现的编程语言之一FORTRAN的一个主要目标,就是实现平台独立。 

赞(11)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程