今天我們將學習 Python 中的文件處理,這是日常開發中非常常見的需求之一。無論是讀取文件內容或是將數據寫入文件,掌握文件操作將使你能夠處理更多的資料來源。
open()open() 函數來打開文件。基本語法:
file = open('filename', 'mode')
mode 定義了你打開文件的方式:
'r': 讀取模式(read)'w': 寫入模式(write),如果文件不存在會創建文件,存在則覆蓋。'a': 追加模式(append),在文件末尾添加內容。'b': 二進制模式(binary),用於處理非文字文件(如圖片)。read()read()、readline() 或 readlines()。read() 會讀取整個文件:
file = open('example.txt', 'r')
content = file.read()
print(content)
file.close()
close() 關閉文件,釋放資源。write()write():
file = open('output.txt', 'w')
file.write("Hello, Python!")
file.close()
append()'a' 模式可以在不覆蓋文件內容的前提下,將新數據追加到文件末尾:
file = open('output.txt', 'a')
file.write("\nAppending new content.")
file.close()
with 語法進行文件操作with 語句可以自動關閉文件,即使發生錯誤也不會影響資源釋放。
with open('example.txt', 'r') as file:
    content = file.read()
    print(content)
# 文件會自動關閉
read() 可能會耗盡記憶體。這時可以使用 readline() 一次讀取一行,或是使用迴圈逐行讀取:
with open('large_file.txt', 'r') as file:
    for line in file:
        print(line.strip())  # .strip() 可以去除換行符
讀取模式 ('r')
FileNotFoundError。寫入模式 ('w')
追加模式 ('a')
二進制模式 ('b')
'rb'、'wb'。假設有一個名為 students.txt 的文件,裡面記錄了學生名單,我們可以讀取並輸出它的內容:
with open('students.txt', 'r') as file:
    content = file.read()
    print("學生名單:")
    print(content)
我們可以將一個程式的運行結果保存到文件中,方便後續查看:
result = "計算結果: 50"
with open('result.txt', 'w') as file:
    file.write(result)
print("結果已保存到 result.txt 文件中。")
CSV(逗號分隔值)是一種常見的資料儲存格式,我們可以使用 Python 內建的 csv 模組來讀取這類文件:
import csv
with open('data.csv', 'r') as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)
FileNotFoundError
try-except 來處理:
try:
    with open('non_existent_file.txt', 'r') as file:
        content = file.read()
except FileNotFoundError:
    print("文件不存在。")
權限錯誤
PermissionError,這通常發生在嘗試訪問系統或受保護的文件時。這個練習要求編寫一個程式來讀取使用者輸入的檔案名,並顯示其內容。若檔案不存在,則顯示錯誤訊息。
def read_file():
    filename = input("請輸入檔案名稱: ")
    try:
        with open(filename, 'r', encoding='utf-8') as file:
            content = file.read()
            print("檔案內容如下:")
            print(content)
    except FileNotFoundError:
        print(f"錯誤:檔案 {filename} 不存在。")
    except Exception as e:
        print(f"發生錯誤:{e}")
# 測試程式
read_file()
open():嘗試以讀取模式開啟指定檔案。FileNotFoundError:捕捉當檔案不存在時引發的錯誤,顯示提示訊息。Exception:捕捉其他潛在錯誤,提供通用的錯誤處理。建立一個簡單的日誌系統,每次程式運行時,將當前的時間戳記和執行結果追加到一個日誌檔案中。
import datetime
def log_result(result):
    timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    log_entry = f"{timestamp} - 執行結果: {result}\n"
    
    with open("log.txt", "a", encoding='utf-8') as log_file:
        log_file.write(log_entry)
    print("日誌已更新。")
# 測試程式
result = "程式運行成功"
log_result(result)
datetime.datetime.now():獲取當前的日期和時間,並格式化為字串。"a" 模式:使用追加模式 (a) 打開檔案,這樣每次運行時會將新內容追加到檔案末尾,而不覆蓋現有內容。log_result 函數:將執行結果和時間戳寫入日誌檔案。這些範例展示了如何進行文件的讀取與寫入,以及如何有效地處理錯誤並在每次程式運行時更新日誌檔案。
今天我們學習了如何進行基本的文件操作,包括讀取、寫入和追加文件,並且了解到如何使用 with 語句更安全地管理文件資源。掌握這些技巧,將使你能夠處理真實世界中的數據文件,更加靈活地完成各種應用場景。
第十五天:Python 進階:物件導向程式設計 (OOP) 的基礎