用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表:
運(yùn)行結(jié)果:
import xlrd
import os
class ExcelReade(object):
def __init__(self, excel_name, sheet_name):
"""
# 我把excel放在工程包的data文件夾中:
# 1.需要先獲取到工程文件的地址
# 2.再找到excel的文件地址(比寫死的絕對(duì)路徑靈活)
os.path.relpath(__file__)
1.根據(jù)系統(tǒng)獲取絕對(duì)路徑
2.會(huì)根據(jù)電腦系統(tǒng)自動(dòng)匹配路徑:mac路徑用/,windows路徑用\
3.直接使用__file__方法是不會(huì)自動(dòng)適配環(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)都會(huì)清空
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í)可能會(huì)帶有一些肉眼難以發(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(),移動(dòng)到指定路徑,不然第二次在同一個(gè)路徑保存會(huì)報(bào)錯(cuò)
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("傳參錯(cuò)誤,單元格:%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é)果: