python 讀寫excel資料--基礎
阿新 • • 發佈:2019-01-24
1. 通過xlrd模組讀取資料
需要安裝xlrd(pip install xlrd)並import
from xlrd import open_workbook as owb
首先需要指定excel檔案,如果excel檔案和python指令碼在同一目錄,使用相對路徑就可以
wb = owb('abc.xlsx') # 資料檔案
wb.sheet()函式返回一個list,是該excel檔案裡所有工作表(sheet)的一個列表
所以如果想指定某一工作表,可以這樣寫
table_base = wb.sheets()[0] # 讀第一頁當作base
如果想迴圈讀取,則這樣寫
for s in wb.sheets(): print ('Sheet: ', s.name)
s.name返回的是工作表的名稱,可以對此進行一些過濾,來篩選出自己想要讀的一部分工作表
讀取資料的函式是cell(row,col).value
for row in range(1,s.nrows): # 跳過第0行,即表頭
tmp = s.cell(row, 2).value # 這裡讀取了第三列(C列)的資料,A列,B列,C列...
print(tmp)
幾點說明:
- s.nrows 返回該工作表的行數
- s.ncols 返回該工作表的列數
- s.cell(row, col).value返回工作表第row行,第col列的資料(如果資料是整數,則會被自動轉化成float)
- 行列下標都是從0開始,所以for迴圈從1開始就跳過了第0行的表頭,而cell(row,2)實際是取第三列的資料
2. 通過xlwt模組寫入資料
類似的,想往excel檔案寫入資料需要安裝xlwt(pip install xlwt)並import
import xlwt
假設我們已有了一小、二小、三小的資料,需要寫入,程式碼如下
my_file = xlwt.Workbook(encoding = 'utf-8') titles = ['分數', '本段人數', '累計人數'] # 表頭 sheet_name = ['一小', '二小', '三小'] # 每個工作表的名稱 write_index = 0 for name in sheet_name: table = my_file.add_sheet(name) # 增加一個工作表 print('table name ', name) '寫第一行,即表頭' for i in range(0, len(titles)): table.write(0,i,titles[i]) '寫資料行' for i in range(0, len(per_point_label)): table.write(i+1, 0, per_point_label[i]) # 分數 table.write(i+1, 1, per_point_data[write_index][i]) # 本段人數 table.write(i+1, 2, per_point_cum_data[write_index][i]) # 累計人數 write_index = write_index + 1 my_file.save('test.xls') #儲存
如果儲存的時候檔名是'xlsx',則用excel開啟時會報錯,無法開啟,故存成xls格式