国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Python與Excel交互——Xlwings實(shí)戰(zhàn)(文末附贈(zèng)python學(xué)習(xí)教程)

上一期講完了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):

  1. 保存數(shù)據(jù)更新數(shù)據(jù)

假設(shè)我們爬取到了快遞信息,并且已經(jīng)處理成了二維列表的形式以便處理(非本文重點(diǎn)不細(xì)說):

1.保存數(shù)據(jù)

import xlwings as xw
wb = xw.Book
sht = wb.sheets[0]
info_list = [['20190001','已攬收','凱撒郵局'],
['20190001','已發(fā)貨','凱撒郵局'],
['20192288','已攬收','麻花鎮(zhèn)郵局'],
['20192288','已發(fā)貨','麻花鎮(zhèn)郵局'],
['20192288','正在派送','阿里山']]

首先,寫入表頭,

titles = [['包裹號(hào)','狀態(tài)','地點(diǎn)']]
sht.range('a1').value = titles

然后寫入軌跡信息

sht.range('a2').value = info_list

保存

wb.save('Track.xlsx')

這樣,第一步保存數(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ù)去重,剩下的就是更新的

首先讀取之前寫入的信息:

import xlwings as xw
wb = xw.Book('Track.xlsx')
sht = wb.sheets[0]
first = sht.range('a2').expand('table').value
print(first)

結(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)為字符串

for i in first:
i[0] = str(round(i[0]))
first_str.append(i)
print(first_str)

思路二:如果大家對(duì)Excel熟悉的話,就會(huì)知道,在數(shù)字前面加一個(gè)英文字符的單引號(hào)('),數(shù)字就變成文本格式了,所以我們可以在寫入信息的時(shí)候加上一個(gè)單引號(hào),這樣Excel就不會(huì)亂改格式了。(以后可能會(huì)寫一些Excel方面的東西)

import xlwings as xw
wb = xw.Book('Track.xlsx')
sht = wb.sheets[0]
info_list = [[''20190001','已攬收','凱撒郵局'],
[''20190001','已發(fā)貨','凱撒郵局'],
[''20192288','已攬收','麻花鎮(zhèn)郵局'],
[''20192288','已發(fā)貨','麻花鎮(zhèn)郵局'],
[''20192288','正在派送','阿里山']]
sht.range('a2').value = info_list
values = sht.range('a2').expand('table').value
print(values)

然后開始真正的去重

extra = [i for i in second if i not in first_str]
print(extra)
print(len(extra))

結(jié)果沒問題,多出三個(gè)軌跡信息

為了介紹xlwings的插入功能,我們?cè)賮碓O(shè)想這樣一種情況:

已經(jīng)有了兩個(gè)包裹的軌跡情況

但是我們得到了20190001包裹的最新情況,需要更新這一個(gè)包裹的信息:

[

['20190001','已攬收','凱撒郵局'],

['20190001','已發(fā)貨','凱撒郵局'],

['20190001','正在派送','王村村口'],

['20190001','已簽收','老王家']

]

首先,去重

extra = [i for i in second if i not in first_str]
print(extra)

顯示要更新的就一條

讀取第一列的包裹號(hào)

rng = sht.range('a1').expand('table')
nrows = rng.rows.count
row_a = sht.range(f'a1:a{nrows}').value

找到要更新的包裹號(hào)

for i in extra:
pkg = i[0]
position = row_a.index(pkg)
print(position)
times = row_a.count(pkg)
print(times)

position = 1 是指在第二行出現(xiàn),times = 3 是指一共有3個(gè)此包裹號(hào)的信息

所以要在第五行插入

rows = position+times+1
sht.range(f'{rows}:{rows}').api.Insert

然后再寫入更新的信息

sht.range(f'a{rows}').value = extra

大功告成!保存

wb.save

其實(shí)折騰了半天都是為了這個(gè)插入語句

sht.range('單元格或行列').api.Insert

#插入列
sht.range('a:a').api.Insert
#插入行
sht.range('2:2').api.Insert
#插入單元格
sht.range('b4').api.Insert

xlwings就說到這里了,講得還算清楚嗎?

最后給大家分享一些學(xué)習(xí)的資料
需要的小伙伴關(guān)注小編,領(lǐng)取方式看簡(jiǎn)介v哦

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
插上翅膀,讓Excel飛起來——xlwings(一)
Python xlwings模塊簡(jiǎn)單使用
xlwings使用教程
運(yùn)營(yíng)學(xué)Python|Python&Excel聯(lián)動(dòng)(上)
xlwings-能讓 Excel 飛上天
xlwings|5個(gè)實(shí)例帶你實(shí)現(xiàn)python與excel交互
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服