Python with語句:安全的文件操作
1. with語句基礎
# 傳統的文件操作方式
file = open('example.txt', 'r')
content = file.read()
file.close()
# 使用with語句(推薦)
with open('example.txt', 'r') as file:
content = file.read()
# 文件會自動關閉
with語句的優點:
- 自動處理文件關閉
- 即使發生異常也能確保資源釋放
- 代碼更簡潔易讀
- 避免資源洩露問題
2. 多文件操作
# 同時操作多個文件
with open('input.txt', 'r') as source,
open('output.txt', 'w') as target:
content = source.read()
target.write(content)
# 嵌套使用
with open('file1.txt', 'r') as f1:
with open('file2.txt', 'w') as f2:
content = f1.read()
f2.write(content)
3. 異常處理
# with語句配合異常處理
try:
with open('data.txt', 'r') as file:
content = file.read()
# 處理文件內容
except FileNotFoundError:
print('文件不存在')
except PermissionError:
print('沒有權限訪問文件')
finally:
print('操作完成')
4. 自定義上下文管理器
class MyContext:
def __enter__(self):
print('進入上下文')
return self
def __exit__(self, exc_type, exc_value, traceback):
print('退出上下文')
return False
# 使用自定義上下文管理器
with MyContext() as ctx:
print('執行操作')
練習題
-
實現文件複製功能:
- 使用with語句讀取源文件
- 將內容寫入目標文件
- 添加適當的錯誤處理
-
創建自定義計時器上下文管理器:
- 記錄代碼塊執行時間
- 輸出執行時間統計
常見錯誤和注意事項
- 不要在with塊外訪問文件對象
- 確保正確的文件打開模式
- 注意文件編碼設置
- 處理可能的異常情況
- 避免在with塊中保留文件引用
最佳實踐
- 總是使用with語句處理文件操作
- 合理組織多文件操作的結構
- 添加適當的異常處理
- 使用有意義的文件對象名稱
- 注意資源使用效率