python讀寫excel(xlrd,xlwd)

用python讀寫excel需要導(dǎo)入xlrd(讀),xlwd(寫)模塊:

前提準(zhǔn)備:

1.先pip安裝xlrd : >>pip install xlrd
pip安裝xlwt : >>pip install xlwt
安裝方法二:
豆瓣源安裝pip install -i https://pypi.douban.com/simple xlwt

xlrd:

2.xlrd :下面是我寫的一個(gè)讀取excel的類
excel表:


image.png

運(yùn)行結(jié)果:


image.png
import xlrd
import os


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

            os.path.relpath(__file__)
            1.根據(jù)系統(tǒng)獲取絕對路徑
            2.會根據(jù)電腦系統(tǒng)自動匹配路徑:mac路徑用/,windows路徑用\
            3.直接使用__file__方法是不會自動適配環(huán)境的
        """
        # 獲取當(dāng)前.py文件所在文件夾層
        dir_path = os.path.dirname(os.path.realpath(__file__))
        # 再次向上獲取工程的文件夾層
        project_path = os.path.dirname(dir_path)
        # 獲取excel所在文件目錄
        self.excel_path = os.path.join(project_path, "data", 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  # 獲取總行數(shù)
        self.cols = self.table.ncols  # 獲取總列數(shù)

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

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

  • 還有一些能用到的方法:
    獲取單元格
        date = xlrd.open_workbook(excel_path)
        table = date.sheet_by_name(sheet_name)
        value = table.cell(1, 2).value  # 獲取第二行第三列單元格的值

我們填寫excel時(shí)可能會帶有一些肉眼難以發(fā)現(xiàn)的空格之類的,可以使用strip() 方法,用于移除字符串頭尾指定的字符(默認(rèn)為空格或換行符)或字符序列。

  • 語法:str.strip([chars])
  • 參數(shù):chars -- 移除字符串頭尾指定的字符序列。
    [?] 注意:該方法只能刪除開頭或是結(jié)尾的字符,不能刪除中間部分的字符。

xlwt:

xlwt:下面是我寫的一個(gè)覆蓋寫入的類:

import xlwt
import os

# excel的存放路徑
excel_path = r'C:\Users\zd\Desktop\test.xls'

class ExcelWrite(object):
    def __init__(self):
        self.excel = xlwt.Workbook()  # 創(chuàng)建一個(gè)工作簿
        self.sheet = self.excel.add_sheet('Sheet1')  # 創(chuàng)建一個(gè)工作表
    
    # 寫入單個(gè)值
    def write_value(self, cell, value):
        '''
            - cell: 傳入一個(gè)單元格坐標(biāo)參數(shù),例如:cell=(0,0),表示修改第一行第一列
        '''
        self.sheet.write(*cell, value)
        # (覆蓋寫入)要先用remove(),移動到指定路徑,不然第二次在同一個(gè)路徑保存會報(bào)錯
        os.remove(excel_path)
        self.excel.save(excel_path)
        
    # 寫入多個(gè)值
    def write_values(self, cells, values):
        '''
            - cells: 傳入一個(gè)單元格坐標(biāo)參數(shù)的list,
            - values: 傳入一個(gè)修改值的list,
            例如:cells = [(0, 0), (0, 1)],values = ('a', 'b')
            表示將列表第一行第一列和第一行第二列,分別修改為 a 和 b
        '''
        # 判斷坐標(biāo)參數(shù)和寫入值的數(shù)量是否相等
        if len(cells) == len(values):
            for i in range(len(values)):
                self.write_value(cells[i], values[i])
        else:
            print("傳參錯誤,單元格:%i個(gè),寫入值:%i個(gè)" % (len(cells), len(values)))

if __name__ == '__main__':
    start = ExcelWrite()
    cells1 = [(0, 0), (0, 1)]
    values1 = ('飛豬', '哈哈')
    start.write_values(cells1, values1)

運(yùn)行結(jié)果:


image.png

更多:python修改已經(jīng)存在的excel表

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容