基于Python实现快递信息提取

目录
  • 前言
  • 一、思路
  • 二、解决方案
  • 三、小小花絮
  • 四、总结

前言

前几天在Python交流群里边,有个叫【^-^】的粉丝分享了一道Python基础的题目,跟快递信息有关的,题目如下:

现在想要达到的效果如下:

一、思路

针对这个问题,首先需要读取列表的信息,之后对列表进行切割,获取列表中的省或者直辖市信息,之后再判断省位信息中是否包含在地址信息中,使用列表追加的方法,进行处理,这里经常会用到字典和列表来存储信息,屡试不爽。

二、解决方案

针对该问题,粉丝【^-^】给出了解决方法,直接上代码如下:

# coding: utf-8
def sp(s):
    citys = []
    dizhi = []
    dice = {}
    dic = {}
    for i in s:
        # print(i)
        a = i[1]
        city = a[0:2]
        zlib = a[0:2]
        citys.append(city)
        dizhi.append(zlib)
    cityss = set(citys)  # 去重
    citysss = list(cityss)  # 转为列表
    d = dice.fromkeys(citysss)
    for key in d:
        h = []
        for j in s:
            b = j[1]
            lgezi = b[0:2]
            if lgezi == key:
                h.append(j)
            dic[key] = h
    # print(dic)
    for key in dic:
        # 遍历字典
        print(key, dic[key])

if __name__ == '__main__':
    sp([
        ['王*龙', '北京市海淀区苏州街大恒科技大厦南座4层'],
        ['郭*峰', '河南省商丘市高新技术开发区恒宇食品厂'],
        ['赵*生', '河北省唐山市朝阳道与学院路路口融通大厦2408室'],
        ['张*', '陕西省咸阳市文汇东路6号西藏民族大学'],
        ['刘*民', '北京市大兴区南海家园四里7号楼1单元902'],
        ['郭*兰', '湖北省武汉市湖北省'],
        ['张*强', '河北省张家口市经开区钻石南路11号'],
        ['鞠*龙', '山东省潍坊市玉清街江山帝景B区12号楼一单元14楼'],
        ['李*', '北京市海淀区西二旗智学苑5号楼超市'],
        ['许*康', '北京市西城区西单北大街甲133号'],
        ['叶*生', '江苏省扬州市扬子江中路756号'],
        ['赵*兴', '北京市海淀区西二旗上地信息路1号金远见大楼华纬讯301'],
        ['徐*革', '北京市海淀区闵庄路3号102栋二层206'],
        ['徐*', '安徽省淮南市金荷小区(金格商场旁)'],
        ['雷*', '北京市朝阳区望京街道望京sohoT1C座1201'],
        ['庄*', '浙江省杭州市恒生电子大厦'],
        ['蔡*恩', '湖北省武汉市仁和路沙湖港湾B区1103'],
        ['陈*', '江苏省苏州市巴城镇湖滨北路193号牛吃蟹庄'],
        ['黄*', '北京市朝阳区霄云路26号鹏润大厦A座33层'],
        ['魏*飞', '河北省石家庄市新石北路与红旗大街交口开元大厦502室'],
        ['张*', '山东省济南市兴港路三庆城市主人'],
        ['段*琪', '山西省临汾市福利路尧乡小区'],
        ['刘*', '北京市昌平区龙禧三街骊龙园601'],
        ['王*生', '上海市杨浦区邯郸路复旦大学遗传学楼319室'],
        ['王*君', '江苏省扬州市叶挺路318号建行营业部'],
        ['王*义', '北京市东城区环球贸易中心D座'],
        ['韩*鉴', '北京市门头沟区滨河路葡东小区七号楼4层D门'],
        ['罗*若', '陕西省西安市龙首北路宫园一号5号楼4单元'],
        ['王*', '北京市海淀区上地东路盈创动力大厦e座801c源清慧虹信息科技'],
        ['马*', '湖北省武汉市庙山中路10号名湖豪庭7栋1403'],
        ['常*峰', '山西省太原市迎新街'],
        ['侯*', '浙江省杭州市江陵路1541号'],
        ['许*娟', '上海市宝山区殷高西路高境二村177号502'],
        ['朱*', '北京市海淀区东升镇宝盛东路奥北科技园领智中心B座5层'],
        ['吴*峰', '湖北省武汉市幸福路鸿福花园1栋3006'],
        ['付*诚', '北京市海淀区观林园'],
        ['滕*', '江苏省南京市秣周东路11号双子楼9号楼15楼君度科技'],
        ['石*刚', '辽宁省大连市大连市经济技术开发区福泉北路20号'],
        ['程*', '北京市昌平区沙河兆丰家园'],
        ['武*', '北京市昌平区回龙观西大街龙腾苑五区16号楼1单元202'],
        ['郭*欣', '北京市西城区阜成门 万通新世界 B座1503']
    ])

代码不算多,需要花点时间去读,不过涉及的知识点并不复杂,基本上有点Python基础,也可以理解。代码运行之后,可以看到效果如下:

不过后来我在读取这份代码的时候,发现中间有个地方写的着实有些冗余,稍微修改下,代码方面简洁一些,一些函数和变量命名加了一些对应的现实意义的单词,可读性强了一丢丢,代码如下:

# coding: utf-8
def sp(text):
    city = []
    dice = {}
    dic = {}
    address = [info[-1] for info in text]
    for city_info in address:
        city.append(city_info[0:2])
    cities = list(set(city))  # 先去重,然后转为列表
    # print(cities)
    dict_keys = dice.fromkeys(cities)

    for key in dict_keys:
        h = []
        for info in text:
            address = info[-1]
            city_info = address[0:2]
            if city_info == key:
                h.append(info)
            dic[key] = h
    # print(dic)
    for key in dic:
        # 遍历字典
        print(key, dic[key])

if __name__ == '__main__':
    sp([
        ['王*龙', '北京市海淀区苏州街大恒科技大厦南座4层'],
        ['柴*虎', '北京市昌平区北七家镇顺玮阁小区'],
        ['韩*', '辽宁省葫芦岛市小庄子乡宝仓村'],
        ['魏*森', '北京市昌平区于辛庄路,赋腾国创中心,2楼'],
        ['邓*明', '北京市丰台区新华街三里1号楼305'],
        ['赵*', '上海市宝山区宝山区高境镇高境一村11号后3号车库'],
        ['徐*亮', '北京市海淀区花园东路11号泰兴大厦302'],
        ['张*凡', '北京市昌平区沙河镇松兰堡迎客家园507'],
        ['赵*', '北京市北京市海淀区农大国际创业园b区6065'],
        ['顾*天', '北京市海淀区上地东路1号华控大厦'],
        ['丁*', '上海市杨浦区安波路533弄硕和商务2号楼1102'],
        ['封*号', '江苏省苏州市陆家镇陆丰东路199号水岸香堤2#2309'],
        ['王*哲', '上海市静安区曲沃路430弄15号401'],
        ['刘**', '湖北省武汉市左岭镇 武汉华星光电一号门'],
        ['付*', '安徽省合肥市长江西路305号电信新技术楼'],
        ['鲁*', '湖北省武汉市武大科技园宏业楼C座'],
        ['张*', '北京市朝阳区小营路13号亚非大厦7层8704室'],
        ['齐*', '湖北省武汉市珞喻路马家庄'],
        ['王*', '北京市海淀区北坞嘉园北里9号楼三单元D01'],
        ['陈*龙', '北京市朝阳区北卫新园'],
        ['曹*生', '江苏省无锡市澄南花苑'],
        ['沈*', '北京市海淀区中关村南大街甲18号北京国际大厦D座7层'],
        ['续*', '山西省晋中市中都广场12层畅快车贷'],
        ['赵*全', '河北省唐山市李钊庄镇大王庄村'],
        ['成*', '上海市虹口区东五小区641号楼2007'],
        ['方*', '上海市闵行区联航路1399弄28号1103室'],
        ['曹*', '上海市浦东新区向城路15号24C'],
        ['韩*德', '北京市大兴区枣园北里小区1号楼8单元202'],
        ['金*鹏', '浙江省温州市温州职业技术学院生活区快递中心'],
        ['陶*明', '浙江省嘉兴市南溪路桂苑小区23幢603'],
        ['李*ir', '北京市丰台区南苑乡 德鑫家园9号楼5单元50'],
        ['姜*杰', '山东省临沂市凤凰岭大街惠民早餐'],
        ['l*xq', '辽宁省沈阳市卫工南街4-4网点2门瀚辰跆拳道'],
        ['单*成', '山东省日照市日照职业技术学院'],
        ['韩*红', '上海市杨浦区隆昌路619号10号楼二楼'],
        ['魏*琪', '北京市丰台区汉威国际广场4区12号楼'],
        ['杨*康', '北京市丰台区丰台科技园汉威广场12栋'],
    ])

三、小小花絮

这里其实还可以通过正则表达式来做地址信息的提取,代码如下:

with open("地址信息.txt", 'r', encoding='utf-8') as f:
    for line in f:
        content = re.compile(r"\['(?P<name>.*?)', '(?P<address>.*?)'\]", re.S)
        result = content.finditer(line)
        for i in result:
            name = i.group("name")
            address = i.group("address")
            print(name, address)

可以得到用户的姓名和地址信息,如下图所示:

之后将得到的数据可以存excel,之后通过pandas进行提取,这里使用小小明大佬给的指导代码,可以提取省位,真不错!

df['地区2']=df.地区.apply(lambda s: s[:(s in ("黑龙江省", "内蒙古自治区"))+2])

四、总结

我是Python进阶者。本文实际生活中的快递信息,基于Python编程,使用Python基础知识中的列表、字典、函数等,实现了数据信息的提取过程。

以上就是基于Python实现快递信息提取的详细内容,更多关于Python快递信息提取的资料请关注我们其它相关文章!

(0)

相关推荐

  • 教你用python提取txt文件中的特定信息并写入Excel

    目录 问题描述: 工具: 操作: 源代码: Reference: 总结 问题描述: 我有一个这样的数据集叫test_result_test.txt,大概几百上千行,两行数据之间隔一个空行. N:505904X:0.969wsecY:0.694wsec N:506038X:4.246wsecY:0.884wsec N:450997X:8.472wsecY:0.615wsec ... 现在我希望能提取每一行X:和Y:后面的数字,然后保存进Excel做进一步的数据处理和分析 就拿第一行来说,我只需要0

  • 使用python自动追踪你的快递(物流推送邮箱)

    前言 最近国内疫情状况好转,快递业也逐渐恢复,大家的快递是不是跑起来了?本文就来讲解如何让 python自动为你查询快递信息 ,并在物流发生更新或者到达指定地点时第一时间将 物流推送至你的邮箱 其实并不复杂,只需要两步即可搞定: 爬取物流动态信息 将信息推送至邮箱 物流追踪 先说一下走过的坑,在一开始的思路就是去找个快递查询的网站查一下快递,然后抓一下包就能拿到我们需要的内容,然后写个爬虫去追踪快递信息,结果一百度发现基本国内查快递的网站用的都是快递100的API,申请个API还要提供一个网站供

  • 教你用Python实现自动提取并收集信息的功能

    一.简介 本功能目的在于提取收据/发票上的信息,用机器代替人的方式,提高工作效率 实现方式是通过cv2模块截取需要的信息,调用百度的api文字识别接口 二.代码实现 1.导入需要的库,包括百度的api接口跟cv2图像截图图库 import cv2 from aip import AipOcr # 读取图片,利用imshow显示图片 pic = cv2.imread(r'Y:\cut\img1.png') pic = cv2.resize(pic,None,fx = 0.5, fy = 0.5)

  • 我的快递一个月没动静于是赶紧上线python快递查询系统

    导语 ​ 随着网购的广泛普及,现在大部分年轻人都喜欢上了网购的方式. 很多东西物美价廉,出不出户也能满足你的购买需求! 尤其是中秋来临,哪些假期短回不了家的也想给家人带点儿中秋礼物~ 这不?赶上中秋了,之前给家里寄东西的时候就出现过几次,物流信息一直没更新,不清楚东西到哪儿了,问卖家:说有时候上面没更新,但是到你家楼下了会打电话让你取快递的~​ ​ 果然,emmmmmm,"打扰了!!"不知道你们遇到过没?? 后来小编在一个专门全国查询快递的网站找到了物流信息23333,感觉这还是蛮实用

  • python实现快递价格查询系统

    本文实例为大家分享了python实现快递价格查询系统的具体代码,供大家参考,具体内容如下 一.代码 #--author--张俊杰@Nick #系统提示 print("欢迎来到快递系统!") #死循环 while 1==1: #简单交互,键入值 weight=int(input("请输入重量(千克): ")) num=input("请输入地点编号(1.其它 2.东三省/宁夏/青海/海南 3.新疆/西藏 4.港澳台/国外):") #定义参数 p=0

  • python批量提取图片信息并保存的实现

    程序运行环境 code # -*- coding:utf-8 -*- # ----------------------------------- # @Time : 2021/2/3 9:23 # @Author : HaoWu # @File : OutPixel.py # ------------------------------------ import sys import os from glob import glob from PIL import Image sys.path.

  • 基于Python实现快递信息提取

    目录 前言 一.思路 二.解决方案 三.小小花絮 四.总结 前言 前几天在Python交流群里边,有个叫[^-^]的粉丝分享了一道Python基础的题目,跟快递信息有关的,题目如下: 现在想要达到的效果如下: 一.思路 针对这个问题,首先需要读取列表的信息,之后对列表进行切割,获取列表中的省或者直辖市信息,之后再判断省位信息中是否包含在地址信息中,使用列表追加的方法,进行处理,这里经常会用到字典和列表来存储信息,屡试不爽. 二.解决方案 针对该问题,粉丝[^-^]给出了解决方法,直接上代码如下:

  • 基于python if 判断选择结构的实例详解

    代码执行结构为顺序结构.选择结构.循环结构. python判断选择结构[if] if 判断条件 #进行判断条件满足之后执行下方语句 执行语句 elif 判断条件 #在不满足上面所有条件基础上进行条件筛选匹配之后执行下方语句 执行语句 else #再不满足上面所有的添加下执行下方语句 执行语句 下面举一个简单的例子,看兜里有多少钱来决定吃什么饭. douliqian=2 if douliqian>200: print("小龙虾走起!!0.0") elif douliqian>

  • 基于Python os模块常用命令介绍

    1.os.name---判断现在正在实用的平台,Windows返回'nt':linux返回'posix' 2.os.getcwd()---得到当前工作的目录. 3.os.listdir()--- 4.os.remove---删除指定文件 5.os.rmdir()---删除指定目录 6.os.mkdir()---创建目录(只能创建一层) 7.os.path.isfile()---判断指定对象是否为文件.是则返回True. 8.os.path.isdir()---判断指定对象是否为目录 9.os.p

  • 基于python中的TCP及UDP(详解)

    python中是通过套接字即socket来实现UDP及TCP通信的.有两种套接字面向连接的及无连接的,也就是TCP套接字及UDP套接字. TCP通信模型 创建TCP服务器 伪代码: ss = socket() # 创建服务器套接字 ss.bind() # 套接字与地址绑定 ss.listen() # 监听连接 inf_loop: # 服务器无限循环 cs = ss.accept() # 接受客户端连接 comm_loop: # 通信循环 cs.recv()/cs.send() # 对话(接收/发

  • 基于python中staticmethod和classmethod的区别(详解)

    例子 class A(object): def foo(self,x): print "executing foo(%s,%s)"%(self,x) @classmethod def class_foo(cls,x): print "executing class_foo(%s,%s)"%(cls,x) @staticmethod def static_foo(x): print "executing static_foo(%s)"%x a=A(

  • 基于python时间处理方法(详解)

    在处理数据和进行机器学习的时候,遇到了大量需要处理的时间序列.比如说:数据库读取的str和time的转化,还有time的差值计算.总结一下python的时间处理方面的内容. 一.字符串和时间序列的转化 time.strptime():字符串=>时间序列 time.strftime():时间序列=>字符串 import time start = "2017-01-01" end = "2017-8-12" startTime = time.strptime

  • 基于Python 的进程管理工具supervisor使用指南

    Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上,也就是无法运行在 Windows 上.Supervisor 官方版目前只能运行在 Python 2.4 以上版本,但是还无法运行在 Python 3 上,不过已经有一个 Python 3 的移植版 supervisor-py3k. 什么情况下我们需要进程管理呢?就是执行一些需要以守护进程方式执行的程序,比如一个后台任务,我最常用的是用来启动和管理基于 Tornado 写的 Web 程序. 除此之

  • 基于python select.select模块通信的实例讲解

    要理解select.select模块其实主要就是要理解它的参数, 以及其三个返回值. select()方法接收并监控3个通信列表, 第一个是所有的输入的data,就是指外部发过来的数据,第2个是监控和接收所有要发出去的data(outgoing data),第3个监控错误信息在网上一直在找这个select.select的参数解释, 但实在是没有, 哎...自己硬着头皮分析了一下. readable, writable, exceptional = select.select(inputs, ou

  • 基于Python和Scikit-Learn的机器学习探索

    你好,%用户名%! 我叫Alex,我在机器学习和网络图分析(主要是理论)有所涉猎.我同时在为一家俄罗斯移动运营商开发大数据产品.这是我第一次在网上写文章,不喜勿喷. 现在,很多人想开发高效的算法以及参加机器学习的竞赛.所以他们过来问我:"该如何开始?".一段时间以前,我在一个俄罗斯联邦政府的下属机构中领导了媒体和社交网络大数据分析工具的开发.我仍然有一些我团队使用过的文档,我乐意与你们分享.前提是读者已经有很好的数学和机器学习方面的知识(我的团队主要由MIPT(莫斯科物理与技术大学)和

  • 基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解

    Pyplot matplotlib.pyplot是一个命令型函数集合,它可以让我们像使用MATLAB一样使用matplotlib.pyplot中的每一个函数都会对画布图像作出相应的改变,如创建画布.在画布中创建一个绘图区.在绘图区上画几条线.给图像添加文字说明等.下面我们就通过实例代码来领略一下他的魅力. import matplotlib.pyplot as plt plt.plot([1,2,3,4]) plt.ylabel('some numbers') plt.show() 上图是我们通

随机推荐