加班党福音!只需5分钟,Python帮你搞定手机号归属地查询!让你有更多时间摸鱼

嗨,大家好,我是花姐,今天给大家分享一个"反内卷"的小故事。

事情是这样的:那天,老板突然拍着桌子找我,说:"花姐啊,这里有个Excel文件,里面有1万多个客户手机号,你按照归属地分分类,尽快给我。"

我当时脑袋一嗡,心想:"老板,靠人肉分类?属实有点离谱了!"不过,我是谁啊,咱可是个Python开发者!面对1万个手机号,咱用代码来搞定,不仅轻松还贼快!💪

以下所看到的手机号码均为程序随机生成,都是假的,都是假的,都是假的!


一、问题拆解

任务是这样的:

  1. 输入:一个Excel表格,里面有1万个客户手机号。
  2. 输出:把这些手机号按照归属地分类,并保存到不同的Excel文件中。

分析一下,完成这个任务需要三步:

  1. 读取Excel文件,拿到手机号。
  2. 获取每个手机号的归属地。
  3. 按归属地分组,把分组后的数据保存到新的Excel文件中。

1和3都简单,就是获取手机号码归属地会有些困难。

花姐找了上网提供归属地查询的API,一看价格,1299果断放弃。

还好在万能的GitHub找到了完美的解决方案。

进去一看调用起来非常简单


剩下的不就手拿把掐了吗!😊

二、所需工具

实现这个任务我们需要用到以下工具:

  1. pandas:用于读取和处理Excel文件。
  2. phone:用于获取手机号归属地。

如果你没有安装这些库,可以直接用以下命令安装:

bash 复制代码
pip install pandas phone

三、代码实现

1. 读取Excel文件

python 复制代码
df = pd.read_excel('客户手机号.xlsx')

这里使用pandas库的read_excel方法读取一个名为客户手机号.xlsx的Excel文件,并将其内容存储在DataFrame(df)中。

2. 初始化Phone库实例

python 复制代码
phone = Phone()

这里创建了Phone类的一个实例。

3. 定义函数获取手机号归属地信息

phone.find()方法返回值为{'phone': 'shoujihaoma', 'province': '广东', 'city': '湛江', 'zip_code': '524000', 'area_code': '0759', 'phone_type': '联通'} 根据返回结果我们保留province、city和phone_type这几个字段,没有查询到的就默认未知。

python 复制代码
def get_location_info(phone_number):
    try:
        # 获取归属地信息
        location = phone.find(phone_number)
        if location:
            # 提取所需的字段
            province = location.get('province', '未知')
            city = location.get('city', '未知')
            phone_type = location.get('phone_type', '未知')
            return province, city, phone_type
        else:
            return '未知', '未知', '未知'
    except Exception as e:
        return '未知', '未知', '未知'

4. 提取归属地信息并添加到DataFrame

python 复制代码
df[['省份', '城市', '运营商']] = df['手机号'].apply(lambda x: pd.Series(get_location_info(x)))
# 你是不是想写个循环遍历df?其实一个lambda就搞定了
  • 这里使用apply()方法对DataFrame中的每个手机号列(df['手机号'])应用get_location_info函数。
  • lambda x: pd.Series(get_location_info(x))这一部分确保get_location_info(x)返回的省份、城市和运营商信息被正确地转换为DataFrame的列。每个手机号的归属地信息会填充到"省份"、"城市"和"运营商"这三列中。
  • apply()会按行遍历手机号列,并调用get_location_info获取每个手机号的归属地信息。

5. 保存修改后的Excel文件

python 复制代码
df.to_excel('客户手机号_归属地信息.xlsx', index=False)
  • 这行代码将处理后的DataFrame保存为新的Excel文件,命名为客户手机号_归属地信息.xlsx
  • index=False表示不保存DataFrame的行索引(即不在Excel中保存第一列的行号)。

四、源码

话不多说,直接上代码👇:

python 复制代码
import pandas as pd
from phone import Phone

# Step 1: 读取Excel文件
df = pd.read_excel('客户手机号.xlsx')

# Step 2: 初始化Phone库实例
phone = Phone()

# Step 3: 定义一个函数获取手机号归属地,并提取所需信息
def get_location_info(phone_number):
    try:
        # 获取归属地信息
        location = phone.find(phone_number)
        if location:
            # 提取所需的字段
            province = location.get('province', '未知')
            city = location.get('city', '未知')
            phone_type = location.get('phone_type', '未知')
            return province, city, phone_type
        else:
            return '未知', '未知', '未知'
    except Exception as e:
        return '未知', '未知', '未知'

# Step 4: 提取归属地信息并添加到DataFrame
df[['省份', '城市', '运营商']] = df['手机号'].apply(lambda x: pd.Series(get_location_info(x)))

# Step 5: 保存修改后的Excel文件
df.to_excel('客户手机号_归属地信息.xlsx', index=False)
print("完成")

五、运行效果

运行代码后,你会在当前目录下生成客户手机号_归属地信息.xlsx


六、花姐的反思

写完这个程序,我忍不住感叹,Python真的是提高生产力的神器啊!😂 再次证明了程序员的存在意义------能让"重复劳动"这种事离我们远远的。如果你还在靠手动方式处理Excel数据,那真的该试试Python了。

当然,写代码的时候要注意以下几点:

  1. 数据库的查询速度很快,但数据量特别大时也需要优化,比如批量处理。
  2. 千万别忘了加异常处理(try...except),特别是处理用户提供的数据时,防止程序崩溃。
  3. 做完任务别忘了喝奶茶庆祝!🍹

七、结语

好了,今天的分享就到这里啦!希望这篇文章能给大家提供一点思路。如果你也有类似的任务,不妨试试用Python来解决,说不定还能让老板对你刮目相看呢!😂

我是花姐,一个专注于Python技术的分享者,咱们下次见!👋

相关推荐
忧陌6061 小时前
Day22打卡-复习
python
天上掉下来个程小白1 小时前
添加购物车-02.代码开发
java·服务器·前端·后端·spring·微信小程序·苍穹外卖
Sylvan Ding2 小时前
PyTorch Lightning实战 - 训练 MNIST 数据集
人工智能·pytorch·python·lightning
水银嘻嘻2 小时前
web 自动化之 Unittest 应用:报告&装饰器&断言
前端·python·自动化
幽络源小助理2 小时前
懒人美食帮SpringBoot订餐系统开发实现
java·spring boot·后端·美食
攻城狮7号2 小时前
Python爬虫第20节-使用 Selenium 爬取小米商城空调商品
开发语言·数据库·爬虫·python·selenium
虚空之月&&轮舞者4 小时前
Python与矢量网络分析仪3671E:自动化测试(Vscode)
网络·vscode·python·射频工程
源码云商4 小时前
基于Spring Boot + Vue的母婴商城系统( 前后端分离)
java·spring boot·后端
李昊哲小课4 小时前
tensorflow-cpu
大数据·人工智能·python·深度学习·数据分析·tensorflow
还听珊瑚海吗8 小时前
基于SpringBoot的抽奖系统测试报告
java·spring boot·后端