有次面試被問到如何優雅地開啟乙個檔案?
那就是用with語句,呼叫過後可以自動關閉。
但是為什麼使用with語句就可以自動關閉呢,原因就是上下文管理協議。
上下文管理協議:包含方法 __enter__() 和 __exit__(),支援該協議的物件要實現這兩個方法。
with open('a.txt
', '
r') as a, open('
b.txt
', 'w'
) as b:
b.write(a.read())
讀取檔案with語句的實現及其呼叫過程:
classreadfile(object):
def__init__
(self, filename):
self.file = open(filename, 'r'
)
def__enter__
(self):
return
self.file
def__exit__
(self, type, value, traceback):
#type, value, traceback 分別代表錯誤的型別、值、追蹤棧
self.file.close()
#返回 true 代表不丟擲錯誤,否則錯誤會被 with 語句丟擲
return
true
with readfile(
'test.txt
') as file_read:
for line in
file_read.readlines():
print(line)
在呼叫的時候:
1、with語句先暫存了readfile類的__exit__方法
2、然後呼叫readfile類的__enter__方法
3、__enter__方法開啟檔案,並將結果返回給with語句
4、上一步的結果被傳遞給file_read引數
5、在with語句內對file_read引數進行操作,讀取每一行
6、讀取完成之後,with語句呼叫之前暫存的__exit__方法
7、__exit__方法關閉了檔案
要注意的是,在__exit__方法內,我們關閉了檔案,但最後返回true,所以錯誤不會被with語句丟擲。否則with語句會丟擲乙個對應的錯誤。
當我們寫檔案時,作業系統往往不會立刻把資料寫入磁碟,而是放到記憶體快取起來,空閒的時候再慢慢寫入。只有呼叫close()方法時,作業系統才保證把沒有寫入的資料全部寫入磁碟。忘記呼叫close()的後果是資料可能只寫了一部分到磁碟,剩下的丟失了。所以,還是用with語句來得保險。
用Python開啟檔案或程式
初學python的小夥伴們,不知道有沒有遇到我這樣的困惑,如何用python來控制電腦用自帶的程式開啟乙個檔案,比如用記事本開啟txt文件,用瀏覽器開啟,或者直接開啟乙個軟體,在網上找了好久才發現,os模組裡有個命令os.startfile,函式作用是使用已關聯的應用程式開啟檔案。下面給大家演示下 ...
python開啟檔案 Python檔案開啟模式
python 內建函式 python 內建函式 python open 函式用於開啟乙個檔案,建立乙個 file 物件,相關的方法才可以呼叫它進行讀寫。寫入檔案時,不會自動加入換行,需要手動在末尾加入,在每個元素後面都換行n,可以用 fo.writelines line n for line in ...
用Python讀取大檔案(上)
通常我們在讀取檔案的時候,會用到read readline readlines 通常可能會有這樣的用法 def test1 with open tmp test.log r as f print f.read 或者def test2 f open tmp test.log r for line in...