1. 程式人生 > >python 讀寫excel資料--基礎

python 讀寫excel資料--基礎

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格式