背景:有兩個excel資料檔案,每個檔案都是2列,第一列是准考證號,第二列是分數。把相同准考證號對應的分數和總分,整理到一個新的excel檔案中,資料共有4列:准考證號、分數1、分數2、總分。
程式碼如下:
import xlrd # 引入讀excel的模組
import xlwt # 玉如寫excel的模組
# 讀excel中的資料
def read_xlsx(file):
# 開啟excel檔案
book = xlrd.open_workbook(file)
# 找到sheet頁
table = book.sheet_by_name("Sheet1")
# 獲取總行數總列數
row_Num = table.nrows
col_Num = table.ncols
# 建立一個字典dict
d1 = {}
# 遍歷excel所有行
for i in range(row_Num):
title = table.cell_value(i, 0) # 讀excel的第1列
value = table.cell_value(i, 1) # 讀excel的第2列
xx = {title: value} # 建立一個臨時的字典
d1.update(xx) # 新增資料到字典中
# 返回excel的資料,即字典
return d1
# 寫資料
def writeExcelFile(filename, header, content):
# 因為輸入都是Unicode字元,這裡使用utf-8,免得來回轉換
workbook = xlwt.Workbook(encoding='utf-8')
booksheet = workbook.add_sheet('Sheet 1', cell_overwrite_ok=True)
# 寫列頭
row = 0
for col in range(len(header)):
booksheet.write(row, col, header[col])
# 寫內容
for lines in content:
row += 1
for col in range(len(lines)):
booksheet.write(row, col, lines[col])
# 儲存檔案
workbook.save(filename)
if __name__ == '__main__':
# 分數1的excel檔案;(注意:兩個excel放在程式檔案相同的檔案下)
d1 = read_xlsx('file1.xlsx')
# 分數2的excel檔案
d2 = read_xlsx('file2.xlsx')
# 再建立一個list
d_final = []
# 邏輯:先讀分數1的字典dict中的准考證號碼和分數1,再到分數2的字典dict中去找同准考證號的分數2
# 遍歷分數1的字典
for k, v in d1.items():
# 依次取出一個鍵(准考證號),找到分數2的字典中相同准考證號的鍵值對
if k in d2.keys():
ddd = [] # 建立一個臨時列表list
ddd = [k, v, d2[k], d2[k] + v] # 為臨時列表list
d_final.append(ddd) # 為最終合併的資料列表list新增資料
# 合併兩個excel後的資料寫到一個新的xlsx檔案中
writeExcelFile("總成績.xlsx", ["准考證號", "分數1", "分數2", "總分"], d_final)