跟商务部小姐姐聊天,她抱怨说客户经常要报备一些产品,但是只是给了一个MAC地址列表,
又不能给到对应的产品批次,每次都要花较多时间去匹配单独匹配,还容易出错,感觉这个活太没成就感。
问我有没啥啥办法可以自动匹配,小姐姐,必定是有求必应的。
基础数据收集
基础的是如下两张表:
订单信息表
订单标号 | MAC地址段 | 产品批次 | 客户名称 |
---|---|---|---|
Dawin001 | 9C:82:74:A4:95:C5-9C:82:74:A4:95:C5 | 20230578 | SAM |
Dawin002 | 1C:82:74:A4:95:C5-1C:82:74:A4:95:C5 | 20230578 | SKD |
Dawin003 | 2C:82:74:A4:95:C5-2C:82:74:A4:95:C5 | 20230578 | SKD |
Dawin004 | 3C:82:74:A4:95:C5-3C:82:74:A4:95:C5 | 20230578 | SKD |
客户地址表
客供地址 | 匹配订单号 | 匹配MAC地址段 | 产品批次 |
---|---|---|---|
9C:82:74:A4:95:C6 | |||
1C:82:74:A4:95:C5 | |||
2C:82:74:A4:95:C4 | |||
3C:82:74:A4:95:C0 |
实现核心代码
那如何通过客户地址表的客供地址,检索出来对应的匹配订单号,匹配MAC地址段,产品批次信息呢?简而言之,就是找到客供地址跟订单信息表中MAC地址段得包含关系既可。
核心代码如下:
- 对MAC地址段做分割处理,得到开始地址和结束地址。
tmplist = x['MAC地址段'].split('-')
tmplist[0]#开始地址
tmplist[1]#截止地址
- 判断mac地址属于地址段
def mac_to_int(mac):
mac = mac.replace(':', '')
return int(mac, 16)
def is_mac_in_range(mac_address, start_mac, end_mac):
mac_int = mac_to_int(mac_address)
start_int = mac_to_int(start_mac)
end_int = mac_to_int(end_mac)
print(mac_int, start_int, end_int)
return start_int <= mac_int <= end_int
- 数据匹配可以使用Pandas库,在实际数据处理中非常方便。
如上,即为整个小工具的核心代码,完整代码整理完再上链接,欢迎关注。
实现结果
QT界面如下图:
注:参考上图,只需要选择数据文件( 将订单信息表和客户地址表存入两个不同的sheet中),并填写对应的sheet名称既可;
运行结果如下表:
客供地址 | 匹配订单号 | 匹配MAC地址段 | 产品批次 |
---|---|---|---|
9C:82:74:A4:95:C6 | Dawin001 | 9C:82:74:A4:95:C5-9C:82:74:A4:95:C5 | 20230578 |
1C:82:74:A4:95:C5 | Dawin002 | 1C:82:74:A4:95:C5-1C:82:74:A4:95:C5 | 20230578 |
2C:82:74:A4:95:C4 | Dawin003 | 2C:82:74:A4:95:C5-2C:82:74:A4:95:C5 | 20230578 |
3C:82:74:A4:95:C0 | Dawin004 | 3C:82:74:A4:95:C5-3C:82:74:A4:95:C5 | 20230578 |
心得感受
- 整个实现逻辑非常简单,也无特别复杂的逻辑关系;
- 但是这样的小工具对我们日常的一些工作还是有大的帮忙,可以节约比较多的时间,让我们的工作也更轻松;
- 准确率会比我们人工核对高非常多,确保基础数据格式整齐既可;
好吧,这样小姐姐就可以每天准点下班去跟男朋友约会了…