首頁>科技>

大家好,我是早起。

在之前的Python辦公自動化系列文章中,我們已經相信介紹了openyxl、xlsxwriter等Python操作Excel庫。

openpyxl操作Excel詳解xlwings操作Excel詳解xlsxwriter操作Excel詳解

相信大家對於幾個庫的差異與使用場景有了一定的認識,本文將繼續介紹另外兩種操作Excel的Python庫---xlrd與xlwt。看看這兩者搭配起來如何玩出火花!

和以前文章一樣,有請老朋友openpyxl登場來進行對比

openyxl:可以對xlsx、xlsm檔案進行讀、寫操作,主要對Excel2007年之後的版本(.xlsx)xlrd:可以對xlsx、xls、xlsm檔案進行讀操作且效率高xlwt:主要對xls檔案進行寫操作且效率高,但是不能執行xlsx檔案

透過對比,可以看到在效率上而言,xlrd&xlwt比openyxl要高效得多。而寫入資料方面上而言,openyxl又比較貼近我們的日常所需,所以兩種方式來處理Excel各有千秋。

一、簡介

xlrd是用來從Excel中讀寫資料的,但我們通常只用它進行讀操作,寫操作會相對於裝門寫入的模組麻煩一些。其實,後面的rd可以看出是reader的縮小。

類比於xlrd的reader,那麼xlwt就相對於writer,而且很純正的一點就是它只能對Excel進行寫操作。xlwt和xlrd不光名字像,連很多函式和操作格式也是完全相同。下面讓我們慢慢介紹。

二、安裝與使用

安裝很簡單,直接在命令列或者終端中使用pip安裝

pip install Xlrdpip install xlwt

而使用xlrd&xlwt操作Excel的大致過程如下圖所示

三、xlrd常用操作詳解

現在我們講解xlrd操作Excel部分常用操作,先準備一份Excel檔案,大致如下圖:

用xlrd進行讀取比較方便,流程和平常手動操作Excel一樣,開啟工作簿(Workbook),選擇工作表(sheets),然後操作單元格(cell)。接下來先介紹一下基本操作在舉個例子。

3.1 開啟Excel檔案

import xlrddf = xlrd.open_workbook(name) 

先匯入模組而後使用open_workbook()函式來讀取指定的一個工作簿物件。這裡的引數name是Excel檔案的名字,一般使用的是相對路徑的名字,結果如下

3.2 檢視工作簿中所有sheet

df.sheet_names()

我們讀取上述檔案,便可以得到以列表形式嵌字串的值。

3.3 選擇某一個工作表

先看程式碼

table=df.sheets()[0]  #列表是從0開始計數table=df.sheet_by_index(0)table=df.sheet_by_name('name')

第一行程式碼是獲取第一個工作表的意思,寫法是根據內建的列表格式來選取的。

第二行程式碼顧名思義是透過索引獲取第一個工作表,這裡的索引與pandas中DataFrame的index索引類似,只不過物件換成了工作表。

第三行程式碼是透過表的名稱選擇工作表,如果工作表是有自己的名字的,那麼這個讀取方式是最方便的。

列印table,可以得到類似下圖的結果

3.4 獲取表格的行數和列數

注意,這裡不需要在函式後面加小括號,否則你可能debug時都頭痛於錯在哪。

row=table.nrowscol=table.ncols

列印row和col,可以發現是和我們的原表格一樣的行列數。

3.5 獲取整行和整列的值

這裡需要注意兩個引數:num1和num2

table.row_values(num1)table.column_values(num2)

num1在row_values()中,指的是選取的行數時多少,例如我們選取第一行所有欄位名稱資料,那麼這個num1就是0。

同理,column_values()的引數就是第幾列的意思。

它出來的值是一個列表的形式。呼叫第一行程式碼,可以得到如下結果。

3.6 透過迴圈讀取表格的所有行

在第五步我們實現了讀取單行單列的資料,那麼我們就用迴圈來將所有行打印出來。

for i in range(table.nrows): print (table.row_values(i))

效果如下

3.7 獲取單元格的值

程式碼很簡單,有點像VBA

cell1=table.row(0)[0].valuecell1=table.cell(0,0).valuecell1=table.col(0)[0].value

第一行獲取單元格值的方式是透過調取指定行資料進行篩選。

第二行是以二維的形式獲取,即(第i行,第j列)形式。

第三行與第一行類似是透過列索引呼叫。

3.8 例子

最後來舉一個完整的例子

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)

打出來的結果

這裡我們的目的是選取上述講解過的語法,將第三行所有資料放到data_list列表中並用for迴圈將它打印出來。

四、xlwt常用操作詳解

4.1 新建一個Excel檔案

直接使用.Workbook()即可

import xlwtdf2 = xlwt.Workbook()

4.2 新建一個工作表

這裡的name是工作表的名稱

table2=df2.add_sheet('name')

4.3 寫入資料到指定單元格

這裡有三個引數,前兩個引數對應(第i行,第j列),代表的是單元格的位置。第三個引數是要寫的值(可以是字串、數字)

table2.write(0,0,'Python')

需要注意的是,如果是對同一個單元格重複操作,會讓Python報錯(多次輸入錯誤),所以如果想要取消這個功能,則新增這個引數在新建工作表的程式碼裡面。

table2=df2.add_sheet('name',cell_overwrite_ok=True)

4.4 儲存檔案

上面提示過,xlwt僅支援.xls的檔案格式輸出,常用的xlsx是不行的。這也是這個模組的一種缺陷。

df2.save('data2.xls')

4.5 改變樣式

調整樣式也是可以的,先看幾行程式碼

style=xlwt.XFStyle()font=xlwt.Font()font.name='name Times New Roman'font.bold=Truestyle.font=fontsheet.write(0,1,'Python',style)

第一行程式碼是初始化樣式,可以認為是一個類似於父類的東西。

第二行程式碼是為樣式建立字型

第三行程式碼是指定字型的名字,這裡用到的是name Times New Roman這個型別。

第四行程式碼是字型加粗,以布林值的形式的設定。

第五行程式碼是將font設定為style的字型

第六行程式碼是寫入檔案單元格時怎麼運用這個格式。

4.6 例子:

最後,我們結合兩個模組進行讀寫操作。

我們的目標是將已經準備好的data檔案進行讀取,並將其內容進行倒序排序,最終以轉置形式輸出。先思考一下如何使用程式碼實現

對於xlwt寫入部分,先建立一個早起Python的工作表。並將提取的資料列表data_list1用列表的倒敘來排序。最後用pop()函式把兩個欄位名稱(grammerpopularity)放在首位。最後結合我們寫入部分講解的內容進行儲存。

在xlrd讀取部分我們稍有不同的是,我們的for迴圈用在了提取所有資料這一步驟,而不再是迴圈輸出列表值。

所以完整程式碼如下

import xlrddf=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 xlwtdf2 = 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的常用操作都盤點了一遍,如果想要了解的透徹一點的話,早起還是建議按照文中介紹的順序自己動手敲一遍程式碼來體會

最後也希望大家能夠體會不同庫之間的異同與使用場景,當然Python操作Excel的庫並不止這五個(openpyxl、xlswriter、xlwings、xlrd、xlwt),我會在全部介紹一遍後為大家送上總結!

14
最新評論
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 醫療產品開發:網際網路時代給醫療行業所帶來的機遇和挑戰