神魂顛倒論壇

 取回密碼
 加入會員
搜尋
檢視: 1053|回覆: 0
收起左側

[後端] Python使用openpyxl讀取excel文件數據的技巧

[複製連結]
發表於 2022-4-14 18:29:45 | 顯示全部樓層 |閱讀模式
Python使用openpyxl讀取excel文件數據的技巧

來源:
https://zhuanlan.zhihu.com/p/444255948

1. 介紹

1.1 介紹

帶著大家學習使用Python讀取Excel文件的方法,Python讀取Excel文件推薦使用openpyxl庫,這個庫介面友好、效率高,可以讓我們簡簡單單地將Excel裡面的數據讀取出來使用。

2. 安裝

2.1 安裝openpyxl庫

使用的是openpyxl庫,直接通過pip安裝即可。

[Plain Text] 純文本查看 複制代碼
pip install openpyxl


3. 讀取文件

這裡有一個測試用的excel文件,我們等下會用openpyxl讀取它的資料。

3.1 預設格式

我們使用最簡單的方式讀取這個報表的內容,遍歷過程沒有進行特別的加工,很直觀~~

步驟如下:
load_workbook > worksheets > worksheet > rows > row > cell > cell.coordinate, cell.value
大家可以記住這個層級關係!

[Python] 純文本查看 複制代碼
import openpyxl

workbook = openpyxl.load_workbook("openpyxl.xlsx")

allSheetDatas = None
if workbook is not None and workbook.worksheets is not None:
    # cycle sheets
    allSheetDatas = []
    for d in range(0, len(workbook.worksheets)):
        mySheet = workbook.worksheets[d]

        # cycle rows
        sheetDatas = []
        for row in mySheet.iter_rows():

            # cycle cell
            sheetRow = {}
            for cell in row:
                sheetRow[cell.coordinate] = cell.value

            # save row
            sheetDatas.append(sheetRow)

    # save sheet
    allSheetDatas.append(sheetDatas)

# dump
if allSheetDatas is not None:
    for d in range(0, len(allSheetDatas)):
        for e in range(0, len(allSheetDatas[d])):
            print(d, e, allSheetDatas[d][e])


3.2 數據表格式
大家可以看到這個導出的格式和Excel上面看到的是顛倒的,列頭在最左邊,數據在右邊,很不方便檢視。

福哥整理了一個排列的程式碼,可以將這個顛倒的格式「正」過來!

[Python] 純文本查看 複制代碼
import openpyxl
import re

workbook = openpyxl.load_workbook("openpyxl.xlsx")

allSheetDatas = None
if workbook is not None and workbook.worksheets is not None:

    # cycle sheets
    allSheetDatas = []
    for d in range(0, len(workbook.worksheets)):
        mySheet = workbook.worksheets[d]

        # cycle rows
        dataTableField = []
        dataFieldRow = None
        sheetDatas = []
        for row in mySheet.iter_rows():

            # cycle cell
            sheetRow = {}

            if dataFieldRow is None:
                dataFieldRow = {}
                for cell in row:
                    colChar = re.sub(r"\d+", "", cell.coordinate)
                    dataFieldRow[colChar] = cell.value

                continue
            else:
                dataRow = {}
                for cell in row:
                    colChar = re.sub(r"\d+", "", cell.coordinate)
                    sheetRow[dataFieldRow[colChar]] = cell.value

            # save row
            sheetDatas.append(sheetRow)

    # save sheet
    allSheetDatas.append(sheetDatas)

# dump
if allSheetDatas is not None:
    for d in range(0, len(allSheetDatas)):
        for e in range(0, len(allSheetDatas[d])):
            print(d, e, allSheetDatas[d][e])



4. 總結

童鞋們學習了Python的openpyxl庫的使用方法,通過openpyxl庫可以快速地將Excel當中的數據讀取出來,形成一個二維的dict結構,便於我們進行加工處理。






您需要登入後才可以回帖 登入 | 加入會員

本版積分規則

Archiver|手機版|小黑屋|Flash2u論壇

GMT+8, 2022-5-17 11:44 , Processed in 0.193268 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回覆 回到頂端 返回清單