python讀取兩個excel資料檔案輸出整理好以後的excel資料檔案

general_jason發表於2020-10-19
背景:有兩個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)



相關文章