Python xlrd模塊詳細介紹並讀取Excel表中的數據

1、xlrd庫的安裝
pip install xlrd

2、xlrd模塊的一些常用命令
①打開excel文件並創建對象存儲

data = xlrd.open_workbook(文件路徑)

②獲取文件中所有工作表的名稱

data.sheet_names()

③根據工作表的名稱獲取裏面的行列內容

table = data.sheet_by_name('Sheet1')

④獲取工作表的名稱、行數、列數

name = table.name
rowNum = table.nrows
colNum = table.ncols

⑤獲取單元格內容的3種方式

table.cell(i,j).value
table.cell_value(i,j)
table.row(i)[j].value

⑥獲取單元格數據類型

table.cell(i,j).ctype
或者
type(table.cell_value(i, j)

xlrd的數據類型有:

0 empty,
1 string,
2 number,
3 date,
4 boolean,
5 error


默認從excel中取出的數據打印出來會有問題:
數字一律按浮點型輸出,日期輸出成一串小數,布爾型輸出0或1,所以我們必須在程序中做判斷處理轉換成我們想要的數據類型
⑦獲取工作表第一行的所有字段列表

table.row_values(0)

3、寫一個自動獲取excel表內容的類
本代碼已實現自動轉換單元格數據類型,不會發生整形數字以浮點數顯示,布爾型True或False顯示爲1,0;日期時間顯示爲一連串的小數問題

import xlrd
from xlrd import xldate_as_tuple
import datetime
'''
xlrd中單元格的數據類型
數字一律按浮點型輸出,日期輸出成一串小數,布爾型輸出0或1,所以我們必須在程序中做判斷處理轉換
成我們想要的數據類型
0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
'''
class ExcelData():
    # 初始化方法
    def __init__(self, data_path, sheetname):
        #定義一個屬性接收文件路徑
        self.data_path = data_path
        # 定義一個屬性接收工作表名稱
        self.sheetname = sheetname
        # 使用xlrd模塊打開excel表讀取數據
        self.data = xlrd.open_workbook(self.data_path)
        # 根據工作表的名稱獲取工作表中的內容(方式①)
        self.table = self.data.sheet_by_name(self.sheetname)
        # 根據工作表的索引獲取工作表的內容(方式②)
        # self.table = self.data.sheet_by_name(0)
        # 獲取第一行所有內容,如果括號中1就是第二行,這點跟列表索引類似
        self.keys = self.table.row_values(0)
        # 獲取工作表的有效行數
        self.rowNum = self.table.nrows
        # 獲取工作表的有效列數
        self.colNum = self.table.ncols

    # 定義一個讀取excel表的方法
    def readExcel(self):
        # 定義一個空列表
        datas = []
        for i in range(1, self.rowNum):
            # 定義一個空字典
            sheet_data = {}
            for j in range(self.colNum):
                # 獲取單元格數據類型
                c_type = self.table.cell(i,j).ctype
                # 獲取單元格數據
                c_cell = self.table.cell_value(i, j)
                if c_type == 2 and c_cell % 1 == 0:  # 如果是整形
                    c_cell = int(c_cell)
                elif c_type == 3:
                    # 轉成datetime對象
                    date = datetime.datetime(*xldate_as_tuple(c_cell,0))
                    c_cell = date.strftime('%Y/%d/%m %H:%M:%S')
                elif c_type == 4:
                    c_cell = True if c_cell == 1 else False
                sheet_data[self.keys[j]] = c_cell
                # 循環每一個有效的單元格,將字段與值對應存儲到字典中
                # 字典的key就是excel表中每列第一行的字段
                # sheet_data[self.keys[j]] = self.table.row_values(i)[j]
            # 再將字典追加到列表中
            datas.append(sheet_data)
        # 返回從excel中獲取到的數據:以列表存字典的形式返回
        return datas
if __name__ == "__main__":
    data_path = "ttt.xlsx"
    sheetname = "Sheet1"
    get_data = ExcelData(data_path, sheetname)
    datas = get_data.readExcel()
    print(datas)

引用:https://www.cnblogs.com/ilovepython/p/11068841.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章