大家好,我是早起。 在之前的Python辦公自動(dòng)化系列文章中,我們已經(jīng)相信介紹了 相信大家對于幾個(gè)庫的差異與使用場景有了一定的認(rèn)識(shí),本文將繼續(xù)介紹另外兩種操作Excel的 和以前文章一樣,有請老朋友 通過對比,可以看到在效率上而言, 類比于 安裝很簡單,直接在命令行或者終端中使用pip安裝 而使用openyxl
、xlsxwriter
等Python操作Excel庫。Python
庫---xlrd
與xlwt
??纯催@兩者搭配起來如何玩出火花!openpyxl
登場來進(jìn)行對比“
”openyxl
:可以對xlsx、xlsm文件進(jìn)行讀、寫操作,主要對Excel2007年之后的版本(.xlsx)xlrd
:可以對xlsx、xls、xlsm文件進(jìn)行讀操作且效率高xlwt
:主要對xls文件進(jìn)行寫操作且效率高,但是不能執(zhí)行xlsx文件xlrd&xlwt
比openyxl
要高效得多。而寫入數(shù)據(jù)方面上而言,openyxl
又比較貼近我們的日常所需,所以兩種方式來處理Excel各有千秋。一、簡介
xlrd
是用來從Excel中讀寫數(shù)據(jù)的,但我們通常只用它進(jìn)行讀操作,寫操作會(huì)相對于裝門寫入的模塊麻煩一些。其實(shí),后面的rd可以看出是reader的縮小。xlrd
的reader,那么xlwt
就相對于writer,而且很純正的一點(diǎn)就是它只能對Excel進(jìn)行寫操作。xlwt和xlrd不光名字像,連很多函數(shù)和操作格式也是完全相同。下面讓我們慢慢介紹。二、安裝與使用
pip install Xlrd
pip install xlwtxlrd&xlwt
操作Excel的大致過程如下圖所示
現(xiàn)在我們講解xlrd
操作Excel部分常用操作,先準(zhǔn)備一份Excel文件,大致如下圖:
用xlrd進(jìn)行讀取比較方便,流程和平常手動(dòng)操作Excel一樣,打開工作簿(Workbook),選擇工作表(sheets),然后操作單元格(cell)。接下來先介紹一下基本操作在舉個(gè)例子。
import xlrd
df = xlrd.open_workbook(name)
先導(dǎo)入模塊而后使用open_workbook()
函數(shù)來讀取指定的一個(gè)工作簿對象。這里的參數(shù)name是Excel文件的名字,一般使用的是相對路徑的名字,結(jié)果如下
df.sheet_names()
我們讀取上述文件,便可以得到以列表形式嵌字符串的值。
先看代碼
table=df.sheets()[0] #列表是從0開始計(jì)數(shù)
table=df.sheet_by_index(0)
table=df.sheet_by_name('name')
第一行代碼是獲取第一個(gè)工作表的意思,寫法是根據(jù)內(nèi)置的列表格式來選取的。
第二行代碼顧名思義是通過索引獲取第一個(gè)工作表,這里的索引與pandas
中DataFrame
的index
索引類似,只不過對象換成了工作表。
第三行代碼是通過表的名稱選擇工作表,如果工作表是有自己的名字的,那么這個(gè)讀取方式是最方便的。
打印table,可以得到類似下圖的結(jié)果
注意,這里不需要在函數(shù)后面加小括號(hào),否則你可能debug時(shí)都頭痛于錯(cuò)在哪。
row=table.nrows
col=table.ncols
打印row和col,可以發(fā)現(xiàn)是和我們的原表格一樣的行列數(shù)。
這里需要注意兩個(gè)參數(shù):num1和num2
table.row_values(num1)
table.column_values(num2)
num1在row_values()
中,指的是選取的行數(shù)時(shí)多少,例如我們選取第一行所有字段名稱數(shù)據(jù),那么這個(gè)num1就是0。
同理,column_values()
的參數(shù)就是第幾列的意思。
它出來的值是一個(gè)列表的形式。調(diào)用第一行代碼,可以得到如下結(jié)果。
在第五步我們實(shí)現(xiàn)了讀取單行單列的數(shù)據(jù),那么我們就用循環(huán)來將所有行打印出來。
for i in range(table.nrows):
print (table.row_values(i))
效果如下
代碼很簡單,有點(diǎn)像VBA
cell1=table.row(0)[0].value
cell1=table.cell(0,0).value
cell1=table.col(0)[0].value
第一行獲取單元格值的方式是通過調(diào)取指定行數(shù)據(jù)進(jìn)行篩選。
第二行是以二維的形式獲取,即(第i行,第j列)形式。
第三行與第一行類似是通過列索引調(diào)用。
最后來舉一個(gè)完整的例子
df=xlrd.open_workbook('data.xlsx')
table=df.sheet_by_name('早起Python')
data_list=[]
data_list.append(table.row_values(1))
for i in data_list:
print(i)
打出來的結(jié)果
這里我們的目的是選取上述講解過的語法,將第三行所有數(shù)據(jù)放到data_list列表中并用for循環(huán)將它打印出來。直接使用.Workbook()
即可
import xlwt
df2 = xlwt.Workbook()
這里的name是工作表的名稱
table2=df2.add_sheet('name')
這里有三個(gè)參數(shù),前兩個(gè)參數(shù)對應(yīng)(第i行,第j列),代表的是單元格的位置。第三個(gè)參數(shù)是要寫的值(可以是字符串、數(shù)字)
table2.write(0,0,'Python')
需要注意的是,如果是對同一個(gè)單元格重復(fù)操作,會(huì)讓Python報(bào)錯(cuò)(多次輸入錯(cuò)誤),所以如果想要取消這個(gè)功能,則添加這個(gè)參數(shù)在新建工作表的代碼里面。
table2=df2.add_sheet('name',cell_overwrite_ok=True)
上面提示過,xlwt
僅支持.xls
的文件格式輸出,常用的xlsx
是不行的。這也是這個(gè)模塊的一種缺陷。
df2.save('data2.xls')
調(diào)整樣式也是可以的,先看幾行代碼
style=xlwt.XFStyle()
font=xlwt.Font()
font.name='name Times New Roman'
font.bold=True
style.font=font
sheet.write(0,1,'Python',style)
第一行代碼是初始化樣式,可以認(rèn)為是一個(gè)類似于父類的東西。
第二行代碼是為樣式創(chuàng)建字體
第三行代碼是指定字體的名字,這里用到的是name Times New Roman
這個(gè)類型。
第四行代碼是字體加粗,以布爾值的形式的設(shè)定。
第五行代碼是將font設(shè)定為style的字體
第六行代碼是寫入文件單元格時(shí)怎么運(yùn)用這個(gè)格式。
最后,我們結(jié)合兩個(gè)模塊進(jìn)行讀寫操作。
我們的目標(biāo)是將已經(jīng)準(zhǔn)備好的data文件進(jìn)行讀取,并將其內(nèi)容進(jìn)行倒序排序,最終以轉(zhuǎn)置形式輸出。先思考一下如何使用代碼實(shí)現(xiàn)??
“對于
xlwt
寫入部分,先創(chuàng)建一個(gè)早起Python的工作表。并將提取的數(shù)據(jù)列表data_list1用列表的倒敘來排序。最后用pop()
函數(shù)把兩個(gè)字段名稱(grammer 和 popularity)放在首位。最后結(jié)合我們寫入部分講解的內(nèi)容進(jìn)行保存。在
”xlrd
讀取部分我們稍有不同的是,我們的for循環(huán)用在了提取所有數(shù)據(jù)這一步驟,而不再是循環(huán)輸出列表值。
所以完整代碼如下
import xlrd
df=xlrd.open_workbook('data.xlsx')
table=df.sheet_by_name('早起Python')
data_list=[]
for i in range(table.nrows):
data_list.append(table.row_values(i))
data_list1 = []
data_list1 = data_list[::-1]
item = data_list1.pop(-1)
data_list1.insert(0,item)
import xlwt
df2 = xlwt.Workbook()
table2=df2.add_sheet('早起Python')
for i in range(2):
for j in range(9):
table2.write(i,j,data_list1[j][i])
df2.save('data2.xls')
至此我們就將xlrd
與xlwt
的常用操作都盤點(diǎn)了一遍,如果想要了解的透徹一點(diǎn)的話,早起還是建議按照文中介紹的順序自己動(dòng)手敲一遍代碼來體會(huì)!
最后也希望大家能夠體會(huì)不同庫之間的異同與使用場景,當(dāng)然Python操作Excel的庫并不止這五個(gè)(openpyxl
、xlswriter
、xlwings
、xlrd
、xlwt
),我會(huì)在全部介紹一遍后為大家送上總結(jié)!
怎么獲取呢?
聯(lián)系客服