上一期講完了xlwings的基本操作
這一期直接來實(shí)戰(zhàn)。
比如說,我們?cè)谝粋€(gè)快遞網(wǎng)站上爬取了幾個(gè)快遞的軌跡信息,我們需要將數(shù)據(jù)保存下來,一個(gè)常規(guī)做法是把數(shù)據(jù)保存在數(shù)據(jù)庫里(Mysql,MongoDB,Redis),另一個(gè)是用Excel的形式存下來。對(duì)于非程序員來說,后者更加普遍,畢竟Excel是世界上使用最廣泛的數(shù)據(jù)分析工具(不吹不黑)。
這次我們用xlwings來實(shí)現(xiàn):
假設(shè)我們爬取到了快遞信息,并且已經(jīng)處理成了二維列表的形式以便處理(非本文重點(diǎn)不細(xì)說):
1.保存數(shù)據(jù)
首先,寫入表頭,
然后寫入軌跡信息
保存
這樣,第一步保存數(shù)據(jù)就完成了
2.更新數(shù)據(jù)
我們第二天又爬取了一次信息,發(fā)現(xiàn)信息更新了:
[
['20190001','已攬收','凱撒郵局'],
['20190001','已發(fā)貨','凱撒郵局'],
['20190001','正在派送','王村村口'],
['20190001','已簽收','老王家'],
['20192288','已攬收','麻花鎮(zhèn)郵局'],
['20192288','已發(fā)貨','麻花鎮(zhèn)郵局'],
['20192288','正在派送','阿里山'],
['20192288','已發(fā)貨','小馬家']
]
更新數(shù)據(jù)其實(shí)沒什么難度,直接覆蓋寫入就好了
但是如果我想知道更新了多少條記錄怎么辦呢?
將數(shù)據(jù)去重,剩下的就是更新的
首先讀取之前寫入的信息:
結(jié)果如下
乍一看沒什么問題,仔細(xì)一看,包裹號(hào)都成了浮點(diǎn)數(shù)!寫入的時(shí)候是字符串,讀取出來就成了浮點(diǎn)數(shù),所以這時(shí)候去重,由于數(shù)據(jù)類型不一致,無法真正去重。
思路一:直接轉(zhuǎn)化數(shù)據(jù)類型,將每個(gè)列表的第一個(gè)元素轉(zhuǎn)為整數(shù),再轉(zhuǎn)為字符串
思路二:如果大家對(duì)Excel熟悉的話,就會(huì)知道,在數(shù)字前面加一個(gè)英文字符的單引號(hào)('),數(shù)字就變成文本格式了,所以我們可以在寫入信息的時(shí)候加上一個(gè)單引號(hào),這樣Excel就不會(huì)亂改格式了。(以后可能會(huì)寫一些Excel方面的東西)
然后開始真正的去重
結(jié)果沒問題,多出三個(gè)軌跡信息
為了介紹xlwings的插入功能,我們?cè)賮碓O(shè)想這樣一種情況:
已經(jīng)有了兩個(gè)包裹的軌跡情況
但是我們得到了20190001包裹的最新情況,需要更新這一個(gè)包裹的信息:
[
['20190001','已攬收','凱撒郵局'],
['20190001','已發(fā)貨','凱撒郵局'],
['20190001','正在派送','王村村口'],
['20190001','已簽收','老王家']
]
首先,去重
顯示要更新的就一條
讀取第一列的包裹號(hào)
找到要更新的包裹號(hào)
position = 1 是指在第二行出現(xiàn),times = 3 是指一共有3個(gè)此包裹號(hào)的信息
所以要在第五行插入
然后再寫入更新的信息
大功告成!保存
其實(shí)折騰了半天都是為了這個(gè)插入語句
xlwings就說到這里了,講得還算清楚嗎?
聯(lián)系客服