DevOps-Programming Basics with Python 16

Project: Automation with Python (Spreadsheet)

ZONGRU Li
May 30, 2023

當前先清空前面課程所有的程式內容剩下空的main.py:

然後將處理一個Spreadsheet檔案,內容大致如下:

上面就是一個公司內常見的表格資料範例

然後接下來會讀取其內容來做一些演練:

  1. 計算各個供應商(Supplier)有多少種商品(Product)
  2. 計算出各家供應商各自商品的價值加總
  3. 列出庫存(Inventory)低於10的商品(Product)列表(例如25號商品只有7個庫存,則印出{25:7})
  4. 往右邊寫出額外一欄位,裡面計算並寫出每個商品的庫存價值到表格內

Install Package

首先先將該清單檔案放到專案內,複製到專案目錄下

接著就要讓Python先讀取清單檔案內容

有許多各種不同的檔案處理的方法

Python就有很多built-inmodule來處理檔案例如

io module(用來create,read,write)

另外還有專門處理Spreadsheet檔案的Package

提供了更多好用的Function來處理Spreadsheet檔案

並且更容易使用

所以到pypi上查找"openpyxl"

複製pip安裝指令後到PyCharmTerminal上執行

然後看到出現在:

這邊可以額外看到在site-packages底下有些目錄有帶一個點:

也就是有""的才是PythonPackage

沒有""的裡面沒有__init__.py檔,也就不是PythonPackage

另外就是有""的底下目錄居然還有""的目錄在裡面

也就是它是有階層(hierarchy)關係的

也就是有Package內還有其他Package

所以簡單的劃分關係:

  1. Module = .py file
  2. Package = 一堆的Module,並且有init.py檔
  3. Library = 一堆的Package,並且有階層關係

所以這邊看到的才會是:

Implementation

這邊開始使用剛剛安裝的openpyxl Library來讀檔,基本寫法如下:

讀取成一個變數

而表格Excel檔內可以有多個Sheet,首先我們要知道Sheet名稱,打開檔案看到

再讀出這個Sheet的內容為新變數:

Exercise 1 — 計算各個供應商(Supplier)有多少種商品(Product)

從表格資料中明顯可以知道有三家供應商(AAA,BBB,CCC)

在撰寫邏輯過程就會需要查閱openpyxl的文件

找到像是最大筆數 →max_row

首先定義最後結果要輸出的格式像這樣:

{"AAA Company": 43, "BBB Company": 17,"CCC Company": 14}

所以先宣告一個結果變數:

然後印出最大筆數:

然後原本預計是要這樣寫迴圈讀取每一行資料的:

但是product_list.max_row其實只是一個75的數字

取而代之應該是要把75放在一個range內變成

也就可以拿到0~74項次

接著還要修正的是第一行是標題

所以要排除掉第一個row(也就是第0項),變成:

這邊有一個Python的觀念

如上的range2 ~ product_list.max_row

也就是2 ~ 75代表的是不包含75

所以再次修正後變成:

2~76(但不會包含76)

而取得某一行的第四個欄位,也就是供應商名稱的方式則是:

然後撰寫重複計算增加的邏輯如下:

接著還有一個要修正的是,目前supplier_name拿到的其實是:

如上看到其實只是Excel的欄位位置,實際拿到值還要:

最後修改並印出結果:

另一個從products_per_supplier中用特定key拿到value的方式還有get(key)

Exercise 2 — 計算出各家供應商各自商品的價值加總

在知道變數取名後,我自己嘗試撰寫邏輯如下

印出來得到

得到各供應商全部庫存的總價值

Exercise 3 — 列出庫存(Inventory)低於10的商品(Product)列表(例如25號商品只有7個庫存,則印出{25:7})

印出得到:

像是第74個只有2個庫存:

另外可以注意到結果值是float,可以簡單調整成整數:

印出結果變成:

Exercise 4 — 往右邊寫出額外一欄位,裡面計算並寫出每個商品的庫存價值到表格內

直接進入到該格子(cell)其實很簡單如下:

然後簡單計算並寫入:

但是寫完後要儲存,這邊最後儲存成另一個檔案則是:

完整印出上面的練習題結果:

完整的Code如下:

執行後看到:

打開inventory_with_total_value.xlsx檔案看到:

以上就完成四個練習

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet