最全整理!Python 操作 Excel 库 xlrd与xlwt 常用操作详解!
來源/早起Python
在之前的Python辦公自動化系列文章中,我們已經相信介紹了openyxl、xlsxwriter等Python操作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?Xlrd pip?install?xlwt而使用xlrd&xlwt操作Excel的大致過程如下圖所示
三、xlrd常用操作詳解
現在我們講解xlrd操作Excel部分常用操作,先準備一份Excel文件,大致如下圖:
用xlrd進行讀取比較方便,流程和平常手動操作Excel一樣,打開工作簿(Workbook),選擇工作表(sheets),然后操作單元格(cell)。接下來先介紹一下基本操作在舉個例子。
3.1 打開Excel文件
import?xlrd df?=?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.nrows col=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].value cell1=table.cell(0,0).value cell1=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?xlwt df2?=?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()函數把兩個字段名稱(grammer 和 popularity)放在首位。最后結合我們寫入部分講解的內容進行保存。
在xlrd讀取部分我們稍有不同的是,我們的for循環用在了提取所有數據這一步驟,而不再是循環輸出列表值。
”所以完整代碼如下
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的常用操作都盤點了一遍,如果想要了解的透徹一點的話,早起還是建議按照文中介紹的順序自己動手敲一遍代碼來體會!
最后也希望大家能夠體會不同庫之間的異同與使用場景,當然Python操作Excel的庫并不止這五個(openpyxl、xlswriter、xlwings、xlrd、xlwt),我會在全部介紹一遍后為大家送上總結!
萬水千山總是情,點個? ????? 行不行。
推薦閱讀
Pandas處理數據太慢,來試試Polars吧!
懶人必備!只需一行代碼,就能導入所有的Python庫
絕!關于pip的15個使用小技巧
介紹10個常用的Python內置函數,99.99%的人都在用!
可能是全網最完整的 Python 操作 Excel庫總結!
總結
以上是生活随笔為你收集整理的最全整理!Python 操作 Excel 库 xlrd与xlwt 常用操作详解!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BAT大佬给的Python神器,内附资源
- 下一篇: 读取Excel的文本框,除了解析xml还