Python-11-檔案讀寫—讓程式不止執行,還能幫你做紀錄
零、前言
檔案讀寫在程式設計中是不可少的學習單元,因為程式在執行時,所有資料都只會站存於記憶體中,當程式結束後,資料也會跟著消失,除非我們透過檔案讀寫的方式將需要存檔的資料寫進檔案裡,這樣下次程式執行時才可以記得以前的資料。
因此,掌握檔案讀寫的技巧,就等於讓程式有了「長期記憶」的功能!
一、寫入檔案
寫入檔案是檔案 I/O 中的基本操作之一,Python 提供了非常簡單的方法來完成這項任務
常見的寫入檔案方式如下:
開啟檔案 使用
open()
函數開啟檔案 這個函數需要兩個參數:「檔案名稱」和「模式」(讀取、寫入等)1 2
# 開啟一個同路徑下的檔案 "example.txt",模式為 "w",代表要寫入(write) file = open("example.txt", "w")
在這裡,我們開啟了一個名為
example.txt
的檔案,並使用w
模式,表示我們要「寫入檔案」 Mode (模式) 可以參考下表:Mode Description r 讀取模式(預設模式) w 寫入模式(會覆寫已存在的檔案) a 附加模式(在檔案結尾追加內容,原本內容不刪除) b 二進制模式(可與其他模式結合使用,如 rb) + 讀寫模式(可與其他模式結合使用,如 r+) 寫入內容 使用
write()
方法將資料寫入檔案1 2
# 寫入字串 "Hello, World!" file.write("Hello, World!")
這段程式碼會將字串 “Hello, World!” 寫入
example.txt
檔案關閉檔案 完成寫入操作後,記得要關閉檔案以確保資料完整寫入,否則檔案的狀態都會是一直開啟狀態
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 中讀取檔案的步驟:
開啟檔案 同樣使用
open()
函數開啟檔案,但這次使用r
模式,表示我們要「讀取檔案」1 2
# 開啟一個同路徑下的檔案 "example.txt",模式為 "r",代表要讀取(read) file = open("example.txt", "r")
讀取內容 使用
read()
方法將檔案內容讀取到變數中1 2 3
content = file.read() print(content) # 輸出:"Hello, World!"
這段程式碼會將
example.txt
檔案中的所有內容讀取並打印出來關閉檔案 取完畢後,同樣要關閉檔案
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 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
的檔案並將字典中的資料寫入。
- 首先,我們有一個字典
從檔案讀取股票價格並計算平均值:
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)的操作。
實務上我們在暫存部分系統資料,或者寫爬蟲爬取金融資料等,都少不了讀寫檔案的步驟,所以還希望讀者可以多看幾次熟悉這邊語法使用方式,對未來進一步學習開發會有極大幫助。