簡體   English   中英

在python中打開和關閉沒有文件對象的文件

[英]opening & closing file without file object in python

使用文件對象打開和關閉文件:

fp=open("ram.txt","w")
fp.close()

如果我們想在不使用文件對象的情況下打開和關閉文件,即;

open("ram.txt","w")

我們需要寫close("poem.txt")或寫close()是否正常?

他們都沒有給出任何錯誤......

只編寫close(),它如何理解我們引用的文件?

對於內存中的每個對象,Python都會保留引用計數 只要沒有對周圍對象的引用,它就會被垃圾收集。

open()函數返回一個文件對象

f = open("myfile.txt", "w")

在上面的行中,您在變量f保留對對象的引用,因此文件對象保持存在。 如果你這樣做

del f

然后文件對象不再有引用,並將被清理。 它將在此過程中關閉,但這可能需要一段時間,這就是為什么使用with構造更好。

但是,如果你這樣做:

open("myfile.txt")

然后創建文件對象並立即再次丟棄,因為沒有對它的引用。 它消失了,關閉了。 不能再關閉它,因為你不能說你想要關閉什么。

open("myfile.txt", "r").readlines()

要評估整個表達式,首先調用open ,它返回一個文件對象,然后調用方法readlines 然后返回結果。 由於現在沒有對文件對象的引用,因此會立即再次丟棄它。

如果我正確理解了問題,我會使用with open(...) 這個答案可能對你幫助什么是python關鍵字“with”用於什么?

在回答你的實際問題時...一個文件對象(當你open時你得到的東西)有對它中文件的引用。 所以當你做的事情如下:

fp = open(myfile, 'w')
fp.write(...)
fp.close()

上面的所有內容,包括writeclose ,都知道它們引用了myfile因為這是與fp相關聯的文件。 我不確定fp.close(myfile)實際上做了什么,但它確實在打開后不需要文件名。

更好的結構,如

with open(myfile,'w') as fp:
    fp.write(...)

不要改變這個; 在這種情況下, fp也是一個上下文管理器,但仍然包含指向myfile的指針; 沒有必要提醒它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM