[Python] open().read() in-line 寫法

  • 2006
  • 0
  • 2013-07-02

[Python] open().read() in-line 寫法

Python 下使用檔案最直覺的寫法是這樣:

f = open(filename)
# do something
f.close()

 

或是這樣:

# Python 2.6+
# 離開 with 區塊時關閉檔案
with open(filename) as f:
    # do something

 

除了這兩種,還有一種更簡潔的寫法:

data = open(filename).read()

 

這種寫法我也喜歡用,但有一個問題 --- 檔案何時會被關閉?

答案是:在檔案物件被記憶體回收時關閉。

 

照這樣看來,這種 in-line 寫法如果不小心使用可能會造成問題 ( 如大量開啟檔案的情況 ),

但是在 [1] 中有提到,

Python 這方面並沒有規範,取決於 Python 版本的實作,

CPython (大多數的 Python 實作),會馬上關閉檔案,

因此不會造成問題,

其他 Python 實作 (IronPython, Jython) 則不必然。

 

相同情形也發生在以下寫法:

for x in open(filename):
    # do something

 

良好的習慣還是要確保檔案能正確的被關閉,

使用 with 語句應該是比較好的選擇 ( 前提是 Python 2.6 版以上 )

 

參考:

[1] Is open().read() safe?

[2] In the Inline “open and write file” is the close() implicit?

[3] Python linecount in a file