【python】只對文件open,不close的后果


這個問題的主要目的是研究當程序中沒有顯示close掉已經open的文件,那么這個文件會在什么時候被close掉?

已經知道在C++中,打開的文件句柄沒有被close掉的話,那這個句柄只會在程序退出時才會被釋放掉,那么在python是否也是這樣的呢?接下來做個實驗:

1.有如下代碼:

import os

class OpenFileTest:
    def openfile(self, filePath):
        handle = open(filePath, 'wb')
        
    pass

if __name__ == "__main__":
    t = OpenFileTest()
    filePath = 'test.txt'
    t.openfile(filePath)
    os.remove(filePath)
print 'success'

執行此腳本結果如下:

沒有任何問題;

2.將代碼稍作改動,將 handle = open(filePath, 'wb') 替換為 self.handle = open(filePath, 'wb'),執行結果如下:

 

結論:由以上的表現可以得知,在第一個程序里由於handle是一個臨時的變量(對象),在函數openfile退出時,handle對象被釋放了,同時也把文件句柄給關閉了;而在第二個程序里,self.handle不再是一個臨時的對象,因此在openfile退出時就沒有釋放句柄,因此就無法刪除test.txt這個文件了;

這里也可以猜測一下,在python里,open返回的是一個類似C++里智能指針的東西,這樣就做到了handle釋放時關閉文件句柄;不過從編程規范上來說,還是主動調用close來關閉文件句柄吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM