在 Python 中,處理文件是常見的操作,例如讀取日誌、寫入數據或修改設定檔。
而 open() 函數正是 Python 提供的內建方法,用來開啟文件並進行讀寫操作。
本篇文章將詳細介紹 open() 函數的用法,包括其語法、不同模式、錯誤處理方式,並補充 with 與 as 關鍵字的使用,讓你更安全、高效地操作文件。
open() 函數的基本介紹
語法
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)其中:
file:必填,表示要開啟的文件名稱(可以是相對或絕對路徑)。mode:文件開啟模式,預設為'r'(只讀)。buffering:緩衝區設定,0為無緩衝,1為行緩衝,-1或>1為系統預設緩衝大小。encoding:字符編碼,讀取文本文件時常用'utf-8'。errors:錯誤處理方式,如'ignore'(忽略錯誤)或'replace'(用替代字符)。newline:控制換行字符的處理方式,適用於文本模式。closefd:是否在關閉open()時一併關閉文件描述符,適用於開啟文件描述符時。opener:自定義文件打開函數,較少用到。
文件模式 (mode)
不同的 mode 影響文件的讀寫方式,以下是常見的模式:
| 模式 | 描述 |
|---|---|
'r' | 以只讀模式開啟(默認),文件不存在則報錯 |
'w' | 以寫入模式開啟,若文件存在則清空內容,否則新建 |
'a' | 以追加模式開啟,寫入內容會添加到文件末尾 |
'x' | 以獨占創建模式開啟,文件存在時會報錯 |
'b' | 二進制模式,可與其他模式搭配(如 'rb') |
't' | 文本模式,可與其他模式搭配(如 'rt',默認) |
'+' | 讀寫模式,可與 'r'、'w'、'a' 搭配(如 'r+') |
描述以只讀模式開啟(默認),文件不存在則報錯
描述以寫入模式開啟,若文件存在則清空內容,否則新建
描述以追加模式開啟,寫入內容會添加到文件末尾
描述以獨占創建模式開啟,文件存在時會報錯
描述二進制模式,可與其他模式搭配(如 'rb')
描述文本模式,可與其他模式搭配(如 'rt',默認)
描述讀寫模式,可與 'r'、'w'、'a' 搭配(如 'r+')
例如:
# 以只讀模式打開文件
file = open("example.txt", "r")
# 以寫入模式打開(會清空原內容)
file = open("example.txt", "w")
# 以追加模式打開(不清空原內容)
file = open("example.txt", "a")
讀取文件內容
Python 提供多種方法來讀取文件內容:
read() 讀取整個文件
file = open("example.txt", "r", encoding="utf-8")
content = file.read()
print(content)
file.close()
readline() 讀取單行
file = open("example.txt", "r", encoding="utf-8")
line = file.readline()
print(line)
file.close()readlines() 讀取所有行並以列表返回
file = open("example.txt", "r", encoding="utf-8")
lines = file.readlines()
print(lines)
file.close()寫入文件
Python 也提供不同方法來寫入內容:
write() 寫入字符串
file = open("example.txt", "w", encoding="utf-8")
file.write("Hello, Python!\n")
file.close()
writelines() 寫入多行
lines = ["第一行\n", "第二行\n", "第三行\n"]
file = open("example.txt", "w", encoding="utf-8")
file.writelines(lines)
file.close()使用 with 和 as 關鍵字
with 的優勢
在使用 open() 時,若忘記 close() 可能會導致內存洩漏或文件鎖定。
而 with 關鍵字可以確保文件在執行完後自動關閉,即便發生錯誤也不影響。
with 與 open() 搭配使用
with open("example.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content) # 文件會在 with 結束後自動關閉相當於手動 close() 的寫法:
file = open("example.txt", "r", encoding="utf-8")
try:
content = file.read()
print(content)
finally:
file.close()
as 關鍵字的作用
在 with open(...) as file: 這種寫法中,as 關鍵字用來給 open() 返回的文件對象起一個變數名,以便後續操作該對象。
with open("example.txt", "w", encoding="utf-8") as f:
f.write("這是一條新數據!")這裡的 as f 代表:
open("example.txt", "w", encoding="utf-8")返回的文件對象被賦值給f。- 之後可以使用
f.write()來對該文件進行操作。
換句話說,as 只是提供了一個簡潔的變數名稱,讓我們可以更方便地引用文件對象。
這種寫法的優勢是:
✅ 自動管理資源(避免忘記關閉文件)
✅ 代碼更簡潔、可讀性更強
✅ 防止異常導致文件未正確關閉
錯誤處理
開啟文件時,可能會遇到文件不存在或無法訪問的錯誤,可以使用 try-except 來處理:
try:
with open("not_exist.txt", "r", encoding="utf-8") as file:
content = file.read()
except FileNotFoundError:
print("文件不存在!")
except PermissionError:
print("沒有權限讀取該文件!")
except Exception as e:
print(f"發生錯誤:{e}")
小結
open()是 Python 內建的文件操作函數,可用來讀取或寫入文件。mode參數控制文件的讀寫方式(如'r'、'w'、'a'等)。with關鍵字確保文件能夠自動關閉,避免手動close()的風險。as關鍵字用來為open()返回的文件對象取別名,讓代碼更簡潔。- 可以使用
try-except來處理文件相關的錯誤,確保代碼更健壯。
希望這篇指南能幫助你掌握 Python 的文件操作,提高開發效率!