文章

Python-11-檔案讀寫—讓程式不止執行,還能幫你做紀錄

零、前言

檔案讀寫在程式設計中是不可少的學習單元,因為程式在執行時,所有資料都只會站存於記憶體中,當程式結束後,資料也會跟著消失,除非我們透過檔案讀寫的方式將需要存檔的資料寫進檔案裡,這樣下次程式執行時才可以記得以前的資料。

因此,掌握檔案讀寫的技巧,就等於讓程式有了「長期記憶」的功能!

一、寫入檔案

寫入檔案是檔案 I/O 中的基本操作之一,Python 提供了非常簡單的方法來完成這項任務

常見的寫入檔案方式如下:

  1. 開啟檔案 使用 open() 函數開啟檔案 這個函數需要兩個參數:「檔案名稱」和「模式」(讀取、寫入等)

    1
    2
    
     # 開啟一個同路徑下的檔案 "example.txt",模式為 "w",代表要寫入(write)
     file = open("example.txt", "w")
    

    在這裡,我們開啟了一個名為 example.txt 的檔案,並使用 w 模式,表示我們要「寫入檔案」 Mode (模式) 可以參考下表:

    ModeDescription
    r讀取模式(預設模式)
    w寫入模式(會覆寫已存在的檔案)
    a附加模式(在檔案結尾追加內容,原本內容不刪除)
    b二進制模式(可與其他模式結合使用,如 rb)
    +讀寫模式(可與其他模式結合使用,如 r+)
  2. 寫入內容 使用 write() 方法將資料寫入檔案

    1
    2
    
     #  寫入字串 "Hello, World!"
     file.write("Hello, World!")
    

    這段程式碼會將字串 “Hello, World!” 寫入 example.txt 檔案

  3. 關閉檔案 完成寫入操作後,記得要關閉檔案以確保資料完整寫入,否則檔案的狀態都會是一直開啟狀態

    1
    
     file.close()
    

以下為完整範例:

1
2
3
4
5
6
7
8
9
# 開檔、寫檔、關檔
file = open("example.txt", "w")
file.write("Hello, World!")
file.close()

# 替代作法,等於上面的寫法,但是比較簡潔,不用另外寫關邏輯,會自動關檔
# 在 with 程式區塊下,可以對 file 物件做處理,離開區塊後,自動關閉檔案
with open("example.txt", "w") as file:
    file.write("Hello, World!")
  • with 在實務上是比較常見的用法,一來是寫法精簡,不用另外寫 file.close() 指令;二來在程式區塊內做檔案處理,在可讀性上也會有比較好的效果

二、讀取檔案

讀取檔案是另一個重要的檔案 I/O 操作,以下是如何在 Python 中讀取檔案的步驟:

  1. 開啟檔案 同樣使用 open() 函數開啟檔案,但這次使用 r 模式,表示我們要「讀取檔案」

    1
    2
    
     # 開啟一個同路徑下的檔案 "example.txt",模式為 "r",代表要讀取(read)
     file = open("example.txt", "r")
    
  2. 讀取內容 使用 read() 方法將檔案內容讀取到變數中

    1
    2
    3
    
     content = file.read()
     print(content)
     # 輸出:"Hello, World!"
    

    這段程式碼會將 example.txt 檔案中的所有內容讀取並打印出來

  3. 關閉檔案 取完畢後,同樣要關閉檔案

    1
    
     file.close()
    

以下是完整的範例:

1
2
3
4
5
6
7
8
9
10
11
# 開檔、讀檔、輸出、關檔
file = open("example.txt", "r")
content = file.read()
print(content)
file.close()

# 替代作法,等於上面的寫法,但是比較簡潔,不用另外寫關邏輯,會自動關檔
# 在 with 程式區塊下,可以對 file 物件做處理,離開區塊後,自動關閉檔案
with open("example.txt", "r") as file:
    content = file.read()
print(content)

三、案例說明

為了更好地理解檔案 I/O 操作,我們來看一個完整的股市相關案例~

假設我們要保存每日抓到的股票價格到檔案,然後再讀取這些價格並計算平均值。

  1. 寫入每日股票價格到檔案

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
     # 建立一個股票價格字典
     stock_prices = {
         "2024-07-20": 150.50,
         "2024-07-21": 152.75,
         "2024-07-22": 149.00,
         "2024-07-23": 151.30,
         "2024-07-24": 153.20
     }
        
     # 打開一個 "stock_prices.txt",mode 為 "w" 代表寫入,檔案物件命名為 file
     with open("stock_prices.txt", "w") as file:
             # 取得字典的每筆 date, price
         for date, price in stock_prices.items():
                     # 一次寫入一行資料,"\n" 是換行符號
                     file.write(f"{date}: {price}\n")
    

    寫入檔案結果 寫入檔案結果

    • 首先,我們有一個字典stock_prices,其中包含日期和對應的股票價格。
    • 我們用 with 語句來開啟一個名為stock_prices.txt的檔案並將字典中的資料寫入。
  2. 從檔案讀取股票價格並計算平均值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
     # 建立空字典,準備下面存取資料
     stock_prices = {}
        
     # 開啟 "stock_prices.txt" 檔案,mode 設定為 "r",代表讀取,檔案物件命名為 file
     with open("stock_prices.txt", "r") as file:
             # 讀每一行文字
         for line in file:
                     # split()負責切割文字,每行文字 2 個資料間都有 ": " 作為分隔,故以此為切割依據
                     date, price = line.split(": ")
                     # 資料寫入字典 stock_prices,price 原本是 str(),要轉成 float()
                     stock_prices[date] = float(price)
        
     # 字典內的值,算平均,sum()計算所有價格總和,len()取得字典資料筆數
     average_price = sum(stock_prices.values()) / len(stock_prices)
     # 輸出均價,":.2f" 代表只顯示到小數點第2位
     print(f"平均股票價格: {average_price:.2f}")
    

    讀檔後,計算平均價格輸出結果 讀檔後,計算平均價格輸出結果

    • 我們從 stock_prices.txt 檔案讀取股票價格並儲存到字典 stock_prices 中。
    • 接著,我們計算股票價格的平均值並打印出來。

四、結語

檔案讀寫是程式設計中非常實用的技能,無論是保存使用者資料、記錄操作日誌還是處理大量資料,都離不開檔案 Input/Output(I/O)的操作。

實務上我們在暫存部分系統資料,或者寫爬蟲爬取金融資料等,都少不了讀寫檔案的步驟,所以還希望讀者可以多看幾次熟悉這邊語法使用方式,對未來進一步學習開發會有極大幫助。

本文章以 CC BY 4.0 授權