用python優雅開啟檔案及上下文管理協議

2022-07-02 20:51:11 字數 1396 閱讀 5799

有次面試被問到如何優雅地開啟乙個檔案?

那就是用with語句,呼叫過後可以自動關閉。

但是為什麼使用with語句就可以自動關閉呢,原因就是上下文管理協議。

上下文管理協議:包含方法 __enter__() 和 __exit__(),支援該協議的物件要實現這兩個方法。

with open('

a.txt

', '

r') as a, open('

b.txt

', 'w'

) as b:

b.write(a.read())

讀取檔案with語句的實現及其呼叫過程:

class

readfile(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...