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

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

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

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

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

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

python通讯录联系人(用Python整理你的通讯录)(1)

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

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

文件内容:

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

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

python通讯录联系人(用Python整理你的通讯录)(2)

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

python通讯录联系人(用Python整理你的通讯录)(3)


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


python通讯录联系人(用Python整理你的通讯录)(4)


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

# 导入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

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

python通讯录联系人(用Python整理你的通讯录)(5)


接下来我想把这些数据变成表格,需要再加几行代码处理下,生成一个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

效果如下:

python通讯录联系人(用Python整理你的通讯录)(6)


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

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

用到的第三方python库 requests, ngender

可以通过pip安装

pip install requests, ngender

,