python3讀寫excel(通過xlrd和xlwd)

1.pip安裝xlrd和xlwt

pip install xlrd
pip install xlwt

2.讀取excel

read.xls表格中內容如下所示:

read.py源代碼如下:

# -*- coding: utf-8 -*- 
import xlrd
import os


class ExcelReade(object):
    def __init__(self, excel_name, sheet_name):
        """
        # 我把excel放在工程包的data文件夾中:
        # 1.需要先獲取到工程文件的地址
        # 2.再找到excel的文件地址(比寫死的絕對路徑靈活)

            os.path.relpath(__file__)
            1.根據系統獲取絕對路徑
            2.會根據電腦系統自動匹配路徑:mac路徑用/,windows路徑用\
            3.直接使用__file__方法是不會自動適配環境的
        """
        # 獲取當前.py文件所在文件夾層
        dir_path = os.path.dirname(os.path.realpath(__file__))
        # 獲取excel所在文件目錄
        self.excel_path = os.path.join(dir_path, "", excel_name)
        # 打開指定的excel文件
        self.date = xlrd.open_workbook(self.excel_path)
        # 找到指定的sheet頁
        self.table = self.date.sheet_by_name(sheet_name)
        self.rows = self.table.nrows  # 獲取總行數
        self.cols = self.table.ncols  # 獲取總列數

    def data_dict(self):
        if self.rows <= 1:
            print("總行數小於等於1,路徑:", end='')
            print(self.excel_path)
            return False
        else:
            # 將列表的第一行設置爲字典的key值
            keys = self.table.row_values(0)
            # 定義一個數組
            data = []
            # 從第二行開始讀取數據,循環rows(總行數)-1次
            for i in range(1, self.rows):
                # 循環內定義一個字典,每次循環都會清空
                dict = {}
                # 從第一列開始讀取數據,循環cols(總列數)次
                for j in range(0, self.cols):
                    # 將value值關聯同一列的key值
                    dict[keys[j]] = self.table.row_values(i)[j]
                # 將關聯後的字典放到數組裏
                data.append(dict)
            return data

if __name__ == '__main__':
    start = ExcelReade('read.xls', u'Sheet1')
    data = start.data_dict()
    
    for i in range(len(data)):
        print(data[i])

read.py運行效果如下圖所示:

3.寫xcel

write.py源代碼:

# -*- coding: utf-8 -*- 
import xlwt
import os

class ExcelWrite(object):
    def __init__(self):
        dir_path = os.path.dirname(os.path.realpath(__file__))
        # 獲取excel所在文件目錄
        self.excel_path = os.path.join(dir_path, "", "write.xls")
        
        self.excel = xlwt.Workbook()  # 創建一個工作簿
        self.sheet = self.excel.add_sheet('Sheet1')  # 創建一個工作表
    
    # 寫入單個值
    def write_value(self, cell, value):
        '''
            - cell: 傳入一個單元格座標參數,例如:cell=(0,0),表示修改第一行第一列
        '''
        self.sheet.write(*cell, value)
        # (覆蓋寫入)要先用remove(),移動到指定路徑,不然第二次在同一個路徑保存會報錯
        if os.path.exists(self.excel_path):
            os.remove(self.excel_path)
        self.excel.save(self.excel_path)
        
    # 寫入多個值
    def write_values(self, cells, values):
        '''
            - cells: 傳入一個單元格座標參數的list,
            - values: 傳入一個修改值的list,
            例如:cells = [(0, 0), (0, 1)],values = ('a', 'b')
            表示將列表第一行第一列和第一行第二列,分別修改爲 a 和 b
        '''
        # 判斷座標參數和寫入值的數量是否相等
        if len(cells) == len(values):
            for i in range(len(values)):
                self.write_value(cells[i], values[i])
        else:
            print("傳參錯誤,單元格:%i個,寫入值:%i個" % (len(cells), len(values)))

if __name__ == '__main__':
    start = ExcelWrite()
    cells = [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
    values = ('id', 'student', 'score', '444', 'DDD', '44')
    start.write_values(cells, values)

write.py運行後生成的excel內容:

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