基于Python實(shí)現(xiàn)快遞信息提取
前言
前幾天在Python交流群里邊,有個(gè)叫【^-^】的粉絲分享了一道Python基礎(chǔ)的題目,跟快遞信息有關(guān)的,題目如下:

現(xiàn)在想要達(dá)到的效果如下:

一、思路
針對(duì)這個(gè)問題,首先需要讀取列表的信息,之后對(duì)列表進(jìn)行切割,獲取列表中的省或者直轄市信息,之后再判斷省位信息中是否包含在地址信息中,使用列表追加的方法,進(jìn)行處理,這里經(jīng)常會(huì)用到字典和列表來存儲(chǔ)信息,屢試不爽。
二、解決方案
針對(duì)該問題,粉絲【^-^】給出了解決方法,直接上代碼如下:
#?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)??#?轉(zhuǎn)為列表
????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([
????????['王*龍',?'北京市海淀區(qū)蘇州街大恒科技大廈南座4層'],
????????['郭*峰',?'河南省商丘市高新技術(shù)開發(fā)區(qū)恒宇食品廠'],
????????['趙*生',?'河北省唐山市朝陽道與學(xué)院路路口融通大廈2408室'],
????????['張*',?'陜西省咸陽市文匯東路6號(hào)西藏民族大學(xué)'],
????????['劉*民',?'北京市大興區(qū)南海家園四里7號(hào)樓1單元902'],
????????['郭*蘭',?'湖北省武漢市湖北省'],
????????['張*強(qiáng)',?'河北省張家口市經(jīng)開區(qū)鉆石南路11號(hào)'],
????????['鞠*龍',?'山東省濰坊市玉清街江山帝景B區(qū)12號(hào)樓一單元14樓'],
????????['李*',?'北京市海淀區(qū)西二旗智學(xué)苑5號(hào)樓超市'],
????????['許*康',?'北京市西城區(qū)西單北大街甲133號(hào)'],
????????['葉*生',?'江蘇省揚(yáng)州市揚(yáng)子江中路756號(hào)'],
????????['趙*興',?'北京市海淀區(qū)西二旗上地信息路1號(hào)金遠(yuǎn)見大樓華緯訊301'],
????????['徐*革',?'北京市海淀區(qū)閔莊路3號(hào)102棟二層206'],
????????['徐*',?'安徽省淮南市金荷小區(qū)(金格商場(chǎng)旁)'],
????????['雷*',?'北京市朝陽區(qū)望京街道望京sohoT1C座1201'],
????????['莊*',?'浙江省杭州市恒生電子大廈'],
????????['蔡*恩',?'湖北省武漢市仁和路沙湖港灣B區(qū)1103'],
????????['陳*',?'江蘇省蘇州市巴城鎮(zhèn)湖濱北路193號(hào)牛吃蟹莊'],
????????['黃*',?'北京市朝陽區(qū)霄云路26號(hào)鵬潤大廈A座33層'],
????????['魏*飛',?'河北省石家莊市新石北路與紅旗大街交口開元大廈502室'],
????????['張*',?'山東省濟(jì)南市興港路三慶城市主人'],
????????['段*琪',?'山西省臨汾市福利路堯鄉(xiāng)小區(qū)'],
????????['劉*',?'北京市昌平區(qū)龍禧三街驪龍園601'],
????????['王*生',?'上海市楊浦區(qū)邯鄲路復(fù)旦大學(xué)遺傳學(xué)樓319室'],
????????['王*君',?'江蘇省揚(yáng)州市葉挺路318號(hào)建行營業(yè)部'],
????????['王*義',?'北京市東城區(qū)環(huán)球貿(mào)易中心D座'],
????????['韓*鑒',?'北京市門頭溝區(qū)濱河路葡東小區(qū)七號(hào)樓4層D門'],
????????['羅*若',?'陜西省西安市龍首北路宮園一號(hào)5號(hào)樓4單元'],
????????['王*',?'北京市海淀區(qū)上地東路盈創(chuàng)動(dòng)力大廈e座801c源清慧虹信息科技'],
????????['馬*',?'湖北省武漢市廟山中路10號(hào)名湖豪庭7棟1403'],
????????['常*峰',?'山西省太原市迎新街'],
????????['侯*',?'浙江省杭州市江陵路1541號(hào)'],
????????['許*娟',?'上海市寶山區(qū)殷高西路高境二村177號(hào)502'],
????????['朱*',?'北京市海淀區(qū)東升鎮(zhèn)寶盛東路奧北科技園領(lǐng)智中心B座5層'],
????????['吳*峰',?'湖北省武漢市幸福路鴻?;▓@1棟3006'],
????????['付*誠',?'北京市海淀區(qū)觀林園'],
????????['滕*',?'江蘇省南京市秣周東路11號(hào)雙子樓9號(hào)樓15樓君度科技'],
????????['石*剛',?'遼寧省大連市大連市經(jīng)濟(jì)技術(shù)開發(fā)區(qū)福泉北路20號(hào)'],
????????['程*',?'北京市昌平區(qū)沙河兆豐家園'],
????????['武*',?'北京市昌平區(qū)回龍觀西大街龍騰苑五區(qū)16號(hào)樓1單元202'],
????????['郭*欣',?'北京市西城區(qū)阜成門?萬通新世界?B座1503']
????])
代碼不算多,需要花點(diǎn)時(shí)間去讀,不過涉及的知識(shí)點(diǎn)并不復(fù)雜,基本上有點(diǎn)Python基礎(chǔ),也可以理解。代碼運(yùn)行之后,可以看到效果如下:

不過后來我在讀取這份代碼的時(shí)候,發(fā)現(xiàn)中間有個(gè)地方寫的著實(shí)有些冗余,稍微修改下,代碼方面簡(jiǎn)潔一些,一些函數(shù)和變量命名加了一些對(duì)應(yīng)的現(xiàn)實(shí)意義的單詞,可讀性強(qiáng)了一丟丟,代碼如下:
#?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))??#?先去重,然后轉(zhuǎn)為列表
????#?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([
????????['王*龍',?'北京市海淀區(qū)蘇州街大恒科技大廈南座4層'],
????????['柴*虎',?'北京市昌平區(qū)北七家鎮(zhèn)順瑋閣小區(qū)'],
????????['韓*',?'遼寧省葫蘆島市小莊子鄉(xiāng)寶倉村'],
????????['魏*森',?'北京市昌平區(qū)于辛莊路,賦騰國創(chuàng)中心,2樓'],
????????['鄧*明',?'北京市豐臺(tái)區(qū)新華街三里1號(hào)樓305'],
????????['趙*',?'上海市寶山區(qū)寶山區(qū)高境鎮(zhèn)高境一村11號(hào)后3號(hào)車庫'],
????????['徐*亮',?'北京市海淀區(qū)花園東路11號(hào)泰興大廈302'],
????????['張*凡',?'北京市昌平區(qū)沙河鎮(zhèn)松蘭堡迎客家園507'],
????????['趙*',?'北京市北京市海淀區(qū)農(nóng)大國際創(chuàng)業(yè)園b區(qū)6065'],
????????['顧*天',?'北京市海淀區(qū)上地東路1號(hào)華控大廈'],
????????['丁*',?'上海市楊浦區(qū)安波路533弄碩和商務(wù)2號(hào)樓1102'],
????????['封*號(hào)',?'江蘇省蘇州市陸家鎮(zhèn)陸豐東路199號(hào)水岸香堤2#2309'],
????????['王*哲',?'上海市靜安區(qū)曲沃路430弄15號(hào)401'],
????????['劉**',?'湖北省武漢市左嶺鎮(zhèn)?武漢華星光電一號(hào)門'],
????????['付*',?'安徽省合肥市長江西路305號(hào)電信新技術(shù)樓'],
????????['魯*',?'湖北省武漢市武大科技園宏業(yè)樓C座'],
????????['張*',?'北京市朝陽區(qū)小營路13號(hào)亞非大廈7層8704室'],
????????['齊*',?'湖北省武漢市珞喻路馬家莊'],
????????['王*',?'北京市海淀區(qū)北塢嘉園北里9號(hào)樓三單元D01'],
????????['陳*龍',?'北京市朝陽區(qū)北衛(wèi)新園'],
????????['曹*生',?'江蘇省無錫市澄南花苑'],
????????['沈*',?'北京市海淀區(qū)中關(guān)村南大街甲18號(hào)北京國際大廈D座7層'],
????????['續(xù)*',?'山西省晉中市中都廣場(chǎng)12層暢快車貸'],
????????['趙*全',?'河北省唐山市李釗莊鎮(zhèn)大王莊村'],
????????['成*',?'上海市虹口區(qū)東五小區(qū)641號(hào)樓2007'],
????????['方*',?'上海市閔行區(qū)聯(lián)航路1399弄28號(hào)1103室'],
????????['曹*',?'上海市浦東新區(qū)向城路15號(hào)24C'],
????????['韓*德',?'北京市大興區(qū)棗園北里小區(qū)1號(hào)樓8單元202'],
????????['金*鵬',?'浙江省溫州市溫州職業(yè)技術(shù)學(xué)院生活區(qū)快遞中心'],
????????['陶*明',?'浙江省嘉興市南溪路桂苑小區(qū)23幢603'],
????????['李*ir',?'北京市豐臺(tái)區(qū)南苑鄉(xiāng)?德鑫家園9號(hào)樓5單元50'],
????????['姜*杰',?'山東省臨沂市鳳凰嶺大街惠民早餐'],
????????['l*xq',?'遼寧省沈陽市衛(wèi)工南街4-4網(wǎng)點(diǎn)2門瀚辰跆拳道'],
????????['單*成',?'山東省日照市日照職業(yè)技術(shù)學(xué)院'],
????????['韓*紅',?'上海市楊浦區(qū)隆昌路619號(hào)10號(hào)樓二樓'],
????????['魏*琪',?'北京市豐臺(tái)區(qū)漢威國際廣場(chǎng)4區(qū)12號(hào)樓'],
????????['楊*康',?'北京市豐臺(tái)區(qū)豐臺(tái)科技園漢威廣場(chǎng)12棟'],
????])
三、小小花絮
這里其實(shí)還可以通過正則表達(dá)式來做地址信息的提取,代碼如下:
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)
可以得到用戶的姓名和地址信息,如下圖所示:

之后將得到的數(shù)據(jù)可以存excel,之后通過pandas進(jìn)行提取,這里使用小小明大佬給的指導(dǎo)代碼,可以提取省位,真不錯(cuò)!
df['地區(qū)2']=df.地區(qū).apply(lambda?s:?s[:(s?in?("黑龍江省",?"內(nèi)蒙古自治區(qū)"))+2])

四、總結(jié)
我是Python進(jìn)階者。本文實(shí)際生活中的快遞信息,基于Python編程,使用Python基礎(chǔ)知識(shí)中的列表、字典、函數(shù)等,實(shí)現(xiàn)了數(shù)據(jù)信息的提取過程。
以上就是基于Python實(shí)現(xiàn)快遞信息提取的詳細(xì)內(nèi)容,更多關(guān)于Python快遞信息提取的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python腳本實(shí)現(xiàn)12306火車票查詢系統(tǒng)
- Python實(shí)現(xiàn)12306火車票搶票系統(tǒng)
- python實(shí)現(xiàn)12306火車票查詢器
- 利用Python實(shí)現(xiàn)命令行版的火車票查看器
- 使用python腳本實(shí)現(xiàn)查詢火車票工具
- 基于Python3.6+splinter實(shí)現(xiàn)自動(dòng)搶火車票
- python實(shí)現(xiàn)快遞價(jià)格查詢系統(tǒng)
- Python編寫車票訂購系統(tǒng)?Python實(shí)現(xiàn)快遞收費(fèi)系統(tǒng)
相關(guān)文章
python中urllib.unquote亂碼的原因與解決方法
這篇文章主要給大家介紹了python中urllib.unquote亂碼的原因與解決方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友可以參考學(xué)習(xí),下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。2017-04-04
如何使用Python的Requests包實(shí)現(xiàn)模擬登陸
這篇文章主要為大家詳細(xì)介紹了使用Python的Requests包模擬登陸,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
基于Python編寫一個(gè)中秋節(jié)嫦娥投食小游戲
今天給大家?guī)淼氖墙o玉兔投喂月餅的小游戲。八月十五中秋夜晚,讓我們對(duì)著月亮許愿:希望我們?cè)谝夂驮谝馕覀兊娜耍T邪避退、百事無忌、平安喜樂、萬事勝意。提前祝大家中秋節(jié)快樂2022-09-09
python密碼學(xué)實(shí)現(xiàn)文件加密教程
這篇文章主要為大家介紹了python密碼學(xué)實(shí)現(xiàn)文件加密教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Django?logging日志模塊實(shí)例詳解(日志記錄模板配置)
Django使用python自帶的logging作為日志打印工具,下面這篇文章主要給大家介紹了Django?logging日志模塊(日志記錄模板配置)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
Python實(shí)現(xiàn)單例模式的五種寫法總結(jié)
單例模式(Singleton Pattern) 是一種常用的軟件設(shè)計(jì)模式,該模式的主要目的是確保某一個(gè)類只有一個(gè)實(shí)例存在。本文為大家整理了五種Python實(shí)現(xiàn)單例模式的寫法,需要的可以參考一下2022-08-08
Python中的復(fù)制操作及copy模塊中的淺拷貝與深拷貝方法
淺拷貝和深拷貝是Python基礎(chǔ)學(xué)習(xí)中必須辨析的知識(shí)點(diǎn),這里我們將為大家解析Python中的復(fù)制操作及copy模塊中的淺拷貝與深拷貝方法:2016-07-07
python opencv人臉識(shí)別考勤系統(tǒng)的完整源碼
這篇文章主要介紹了python opencv人臉識(shí)別考勤系統(tǒng)的完整源碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04

