Python讀寫excle之xlrd、xlwt

痴颠笑天發表於2024-11-30

1.1、xlrd模組介紹

xlrd:用於讀取Excle資料檔案將返回的資料物件放到記憶體中,然後查詢資料檔案物件的相關資訊。

xlwt:用於在記憶體中生成新的資料檔案物件,處理完成後寫入到Excel資料檔案中。

xlutils:主要的作用就是copy新的檔案物件,在新的資料物件中完成資料處理操作。

注意:在使用 xlrd 讀取 .xlsx 檔案時,由於 xlrd 從版本 2.0.0 開始停止支援 .xlsx 格式,可能會遇到 xlrd.biffh.XLRDError: Excel xlsx file; not supported 的錯誤。

如果需要讀取.xlsx檔案,你可能需要安裝1.2.0版本的xlrd。

1.2、xlrd操作方法彙總

1.2.1、Excel操作

1.2.1.1、開啟檔案

import xlrd

workbook = xlrd.open_workbook('test.xls')
print(workbook)  # <xlrd.book.Book object at 0x7f592100ff50>

1.2.1.2、獲取所有的表名

import xlrd
 
workbook = xlrd.open_workbook(r'./code/excelRead/test.xls')
# 獲取所有的工作表名
sheet_names = workbook.sheet_names()
print(sheet_names)  # ['sdxl', 'hzgg', 'sdyxz', 'TB2018']
# 獲取所有的sheet物件
Sheets = workbook.sheets()
print(Sheets)  # [Sheet  0:<sdxl>, Sheet  1:<hzgg>, Sheet  2:<sdyxz>, Sheet  3:<TB2018>]

1.2.1.3、獲取指定的Sheet

import xlrd
 
workbook = xlrd.open_workbook(r'./code/excelRead/test.xls')
# 方式一:透過索引選取
sheet1 = workbook.sheets()[0]
print(sheet1 )  # Sheet  0:<sdxl>
 
# 方式二:透過索引選取
sheet2 = workbook.sheet_by_index(2)
print(sheet2)  # Sheet  2:<sdyxz>
 
# 方式三:透過表名選取,返回一個<class 'xlrd.sheet.Sheet'>物件
sheet = workbook.sheet_by_name("hzgg")
print(sheet)  # Sheet  1:<hzgg>

1.2.1.4、某個sheet是否匯入完畢

# 透過索引,檢查某個sheet是否匯入完畢
print(workbook.sheet_loaded(0))  # True
# 透過檔名,檢查某個sheet是否匯入完畢
print(workbook.sheet_loaded("hzgg"))  # True

1.2.2、sheet物件的基本操作

1.2.2.1、sheet錶行操作

1.2.2.1.1、獲取表中所有的行數
import xlrd
 
workbook = xlrd.open_workbook(r'./code/excelRead/test.xls')
sheet2 = workbook.sheet_by_name("hzgg")
# 特別注意,這是屬性而不是方法,不加括號
print(sheet2.nrows)  # 17
1.2.2.1.2、返回指定行的所有單元格數值組成的列表

Python讀寫excle之xlrd、xlwt

1.2.2.1.3、獲取某行的型別及資料
Python讀寫excle之xlrd、xlwt
1.2.2.1.4、獲取某行的型別的列表

單元型別ctype:empty為0,string為1,number為2,date為3,boolean為4, error為5(左邊為型別,右邊為型別對應的值)

Python讀寫excle之xlrd、xlwt

1.2.2.1.5、以切片形式獲取某行的型別及資料
Python讀寫excle之xlrd、xlwt
1.2.2.1.6、獲取某行的長度
Python讀寫excle之xlrd、xlwt
1.2.2.1.7、獲取sheet的所有行生成器

Python讀寫excle之xlrd、xlwt
1.2.2.2、sheet表列操作

1.2.2.2.1、獲取有效列數
import xlrd
 
workbook = xlrd.open_workbook(r'./code/excelRead/test.xls')
sheet2 = workbook.sheet_by_name("hzgg")
# 獲取有效列數
print(sheet2.ncols)  # 9
1.2.2.2.2、獲取某列資料
Python讀寫excle之xlrd、xlwt
1.2.2.2.3、獲取某列型別
Python讀寫excle之xlrd、xlwt
1.2.2.2.4、以切片方式獲取某列型別及資料
Python讀寫excle之xlrd、xlwt

1.2.2.3、單元格操作

Python讀寫excle之xlrd、xlwt


1.2.2.4、單元格中的日期/時間操作

在使用xlrd讀取excel時,我們常常會遇到日期格式的資料,如果我們不經過任何處理,那麼我們得到會是如 45089.0、45171.0 這樣的excel時間戳。那麼我們該如何讀取呢?這裡介紹倆方法。

1.2.2.4.1、xlrd.xldate_as_tuple(xldate, datemode)

xlrd.xldate_as_tuple(xldate,datemode)

:param xldate: 要處理的單元格值,自然是excel中的日期資料

:param datemode: 使用哪條基準的時間戳(0代表1900-01-01為基準,1代表1904-01-01為基準);常使用1900為基準

返回值:返回一個元組,類似於(year,month,day,hour,minute,nearest_second)

但是,僅適用於date型別的excel單元格,不適用於time型別的單元格,對於time型別的單元格值,報錯:XLDateAmbiguous

Python讀寫excle之xlrd、xlwt

1.2.2.4.2、xlrd.xldate.xldate_as_datetime(xldate, datemode)

xlrd.xldate.xldate_as_datetime(xldate,datemode)

:param xldate: 要處理的單元格值,自然是excel中的日期資料

:param datemode: 使用哪條基準的時間戳(0代表1900-01-01為基準,1代表1904-01-01為基準);常使用1900為基準

返回值:datetime物件,格式 year-month-day hour:minute:second

但是,對於time型別的單元格值,轉化後自動以基準補充;如基準選擇1900時,時間 13:09:30 轉化後為:1900-01-01 23:08:00

Python讀寫excle之xlrd、xlwt

相關文章