基于Python實現(xiàn)快遞信息提取
前言
前幾天在Python交流群里邊,有個叫【^-^】的粉絲分享了一道Python基礎(chǔ)的題目,跟快遞信息有關(guān)的,題目如下:
現(xiàn)在想要達到的效果如下:
一、思路
針對這個問題,首先需要讀取列表的信息,之后對列表進行切割,獲取列表中的省或者直轄市信息,之后再判斷省位信息中是否包含在地址信息中,使用列表追加的方法,進行處理,這里經(jīng)常會用到字典和列表來存儲信息,屢試不爽。
二、解決方案
針對該問題,粉絲【^-^】給出了解決方法,直接上代碼如下:
#?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號西藏民族大學(xué)'], ????????['劉*民',?'北京市大興區(qū)南海家園四里7號樓1單元902'], ????????['郭*蘭',?'湖北省武漢市湖北省'], ????????['張*強',?'河北省張家口市經(jīng)開區(qū)鉆石南路11號'], ????????['鞠*龍',?'山東省濰坊市玉清街江山帝景B區(qū)12號樓一單元14樓'], ????????['李*',?'北京市海淀區(qū)西二旗智學(xué)苑5號樓超市'], ????????['許*康',?'北京市西城區(qū)西單北大街甲133號'], ????????['葉*生',?'江蘇省揚州市揚子江中路756號'], ????????['趙*興',?'北京市海淀區(qū)西二旗上地信息路1號金遠見大樓華緯訊301'], ????????['徐*革',?'北京市海淀區(qū)閔莊路3號102棟二層206'], ????????['徐*',?'安徽省淮南市金荷小區(qū)(金格商場旁)'], ????????['雷*',?'北京市朝陽區(qū)望京街道望京sohoT1C座1201'], ????????['莊*',?'浙江省杭州市恒生電子大廈'], ????????['蔡*恩',?'湖北省武漢市仁和路沙湖港灣B區(qū)1103'], ????????['陳*',?'江蘇省蘇州市巴城鎮(zhèn)湖濱北路193號牛吃蟹莊'], ????????['黃*',?'北京市朝陽區(qū)霄云路26號鵬潤大廈A座33層'], ????????['魏*飛',?'河北省石家莊市新石北路與紅旗大街交口開元大廈502室'], ????????['張*',?'山東省濟南市興港路三慶城市主人'], ????????['段*琪',?'山西省臨汾市福利路堯鄉(xiāng)小區(qū)'], ????????['劉*',?'北京市昌平區(qū)龍禧三街驪龍園601'], ????????['王*生',?'上海市楊浦區(qū)邯鄲路復(fù)旦大學(xué)遺傳學(xué)樓319室'], ????????['王*君',?'江蘇省揚州市葉挺路318號建行營業(yè)部'], ????????['王*義',?'北京市東城區(qū)環(huán)球貿(mào)易中心D座'], ????????['韓*鑒',?'北京市門頭溝區(qū)濱河路葡東小區(qū)七號樓4層D門'], ????????['羅*若',?'陜西省西安市龍首北路宮園一號5號樓4單元'], ????????['王*',?'北京市海淀區(qū)上地東路盈創(chuàng)動力大廈e座801c源清慧虹信息科技'], ????????['馬*',?'湖北省武漢市廟山中路10號名湖豪庭7棟1403'], ????????['常*峰',?'山西省太原市迎新街'], ????????['侯*',?'浙江省杭州市江陵路1541號'], ????????['許*娟',?'上海市寶山區(qū)殷高西路高境二村177號502'], ????????['朱*',?'北京市海淀區(qū)東升鎮(zhèn)寶盛東路奧北科技園領(lǐng)智中心B座5層'], ????????['吳*峰',?'湖北省武漢市幸福路鴻?;▓@1棟3006'], ????????['付*誠',?'北京市海淀區(qū)觀林園'], ????????['滕*',?'江蘇省南京市秣周東路11號雙子樓9號樓15樓君度科技'], ????????['石*剛',?'遼寧省大連市大連市經(jīng)濟技術(shù)開發(fā)區(qū)福泉北路20號'], ????????['程*',?'北京市昌平區(qū)沙河兆豐家園'], ????????['武*',?'北京市昌平區(qū)回龍觀西大街龍騰苑五區(qū)16號樓1單元202'], ????????['郭*欣',?'北京市西城區(qū)阜成門?萬通新世界?B座1503'] ????])
代碼不算多,需要花點時間去讀,不過涉及的知識點并不復(fù)雜,基本上有點Python基礎(chǔ),也可以理解。代碼運行之后,可以看到效果如下:
不過后來我在讀取這份代碼的時候,發(fā)現(xiàn)中間有個地方寫的著實有些冗余,稍微修改下,代碼方面簡潔一些,一些函數(shù)和變量命名加了一些對應(yīng)的現(xiàn)實意義的單詞,可讀性強了一丟丟,代碼如下:
#?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樓'], ????????['鄧*明',?'北京市豐臺區(qū)新華街三里1號樓305'], ????????['趙*',?'上海市寶山區(qū)寶山區(qū)高境鎮(zhèn)高境一村11號后3號車庫'], ????????['徐*亮',?'北京市海淀區(qū)花園東路11號泰興大廈302'], ????????['張*凡',?'北京市昌平區(qū)沙河鎮(zhèn)松蘭堡迎客家園507'], ????????['趙*',?'北京市北京市海淀區(qū)農(nóng)大國際創(chuàng)業(yè)園b區(qū)6065'], ????????['顧*天',?'北京市海淀區(qū)上地東路1號華控大廈'], ????????['丁*',?'上海市楊浦區(qū)安波路533弄碩和商務(wù)2號樓1102'], ????????['封*號',?'江蘇省蘇州市陸家鎮(zhèn)陸豐東路199號水岸香堤2#2309'], ????????['王*哲',?'上海市靜安區(qū)曲沃路430弄15號401'], ????????['劉**',?'湖北省武漢市左嶺鎮(zhèn)?武漢華星光電一號門'], ????????['付*',?'安徽省合肥市長江西路305號電信新技術(shù)樓'], ????????['魯*',?'湖北省武漢市武大科技園宏業(yè)樓C座'], ????????['張*',?'北京市朝陽區(qū)小營路13號亞非大廈7層8704室'], ????????['齊*',?'湖北省武漢市珞喻路馬家莊'], ????????['王*',?'北京市海淀區(qū)北塢嘉園北里9號樓三單元D01'], ????????['陳*龍',?'北京市朝陽區(qū)北衛(wèi)新園'], ????????['曹*生',?'江蘇省無錫市澄南花苑'], ????????['沈*',?'北京市海淀區(qū)中關(guān)村南大街甲18號北京國際大廈D座7層'], ????????['續(xù)*',?'山西省晉中市中都廣場12層暢快車貸'], ????????['趙*全',?'河北省唐山市李釗莊鎮(zhèn)大王莊村'], ????????['成*',?'上海市虹口區(qū)東五小區(qū)641號樓2007'], ????????['方*',?'上海市閔行區(qū)聯(lián)航路1399弄28號1103室'], ????????['曹*',?'上海市浦東新區(qū)向城路15號24C'], ????????['韓*德',?'北京市大興區(qū)棗園北里小區(qū)1號樓8單元202'], ????????['金*鵬',?'浙江省溫州市溫州職業(yè)技術(shù)學(xué)院生活區(qū)快遞中心'], ????????['陶*明',?'浙江省嘉興市南溪路桂苑小區(qū)23幢603'], ????????['李*ir',?'北京市豐臺區(qū)南苑鄉(xiāng)?德鑫家園9號樓5單元50'], ????????['姜*杰',?'山東省臨沂市鳳凰嶺大街惠民早餐'], ????????['l*xq',?'遼寧省沈陽市衛(wèi)工南街4-4網(wǎng)點2門瀚辰跆拳道'], ????????['單*成',?'山東省日照市日照職業(yè)技術(shù)學(xué)院'], ????????['韓*紅',?'上海市楊浦區(qū)隆昌路619號10號樓二樓'], ????????['魏*琪',?'北京市豐臺區(qū)漢威國際廣場4區(qū)12號樓'], ????????['楊*康',?'北京市豐臺區(qū)豐臺科技園漢威廣場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)
可以得到用戶的姓名和地址信息,如下圖所示:
之后將得到的數(shù)據(jù)可以存excel,之后通過pandas進行提取,這里使用小小明大佬給的指導(dǎo)代碼,可以提取省位,真不錯!
df['地區(qū)2']=df.地區(qū).apply(lambda?s:?s[:(s?in?("黑龍江省",?"內(nèi)蒙古自治區(qū)"))+2])
四、總結(jié)
我是Python進階者。本文實際生活中的快遞信息,基于Python編程,使用Python基礎(chǔ)知識中的列表、字典、函數(shù)等,實現(xiàn)了數(shù)據(jù)信息的提取過程。
以上就是基于Python實現(xiàn)快遞信息提取的詳細內(nèi)容,更多關(guān)于Python快遞信息提取的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python 中pyqt5 樹節(jié)點點擊實現(xiàn)多窗口切換問題
這篇文章主要介紹了python 中pyqt5 樹節(jié)點點擊實現(xiàn)多窗口切換問題,文中給大家介紹了python pyqt5 點擊按鈕來打開另一個窗口的方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒借鑒價值,需要的朋友可以參考下2019-07-07Python range函數(shù)之生成器函數(shù)的示例
這篇文章主要介紹了Python range函數(shù)之生成器函數(shù)的示例,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12利用Python將彩色圖像轉(zhuǎn)為灰度圖像的兩種方法
這篇文章主要給大家介紹了關(guān)于利用Python將彩色圖像轉(zhuǎn)為灰度圖像的兩種方法,以及python 批量將圖片轉(zhuǎn)為灰度圖的方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2021-12-12Pycharm創(chuàng)建文件時自動生成文件頭注釋(自定義設(shè)置作者日期)
這篇文章主要介紹了Pycharm創(chuàng)建文件時自動生成文件頭注釋(自定義設(shè)置作者日期),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11對Python Class之間函數(shù)的調(diào)用關(guān)系詳解
今天小編就為大家分享一篇對Python Class之間函數(shù)的調(diào)用關(guān)系詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01使用Protocol Buffers的C語言拓展提速Python程序的示例
這篇文章主要介紹了使用Protocol Buffers的C語言拓展提速Python程序的示例,使用C拓展Python是Python編程進階中的重要技巧,需要的朋友可以參考下2015-04-04