2012-01-15 28 views
3
lines = len(open(filename, 'r').readlines()) //or 
open(filename, 'w').writelines(lines) 

在python中是否這樣行,關閉打開的文件?如果不是如何關閉沒有分配給任何變量的文件?此外,這些類型的編碼被稱爲「它是否引用語義」?文件是關閉還是仍然在內存中?

回答

6

Python的垃圾回收器會在你最後一次使用它們之後的一段時間內清理打開的文件對象(這可能會也可能不會馬上)。這是最好要明確,例如:

with open(filename, 'r') as f: 
    lines = len(f.readlines()) 

with open(filename, 'w') as f: 
    f.writelines(lines) 

標準的CPython實現使用引用計數,並往往會非常迅速清理對象。但是,其他實現(如IronPython)則以不同的方式處理垃圾收集,並且行爲可能不盡相同。

1

在CPython中,引用計數將導致文件立即關閉。在其他版本的Python中,它將保持打開狀態,直到定期垃圾收集器運行。

相關問題