我有一个文件对象"文件"我打开了:
with open("text.txt","rb") as file:
#read some line
file.write("texte") # i know that doesn't work
我只是想知道我是否可以再次重新打开这个文件,因为python有关于它的所有信息,但它说该文件已关闭。 我试图读取文件中的一些行,最后,我将在文件末尾写一个新行,所以我想在追加模式下重新打开这个文件 ReactiveMongoOperations
我正在调用一个函数,该函数将文件句柄作为参数,因此我不能重复使用open作为第一次,因为该函数内部未知文件的名称
我想知道我是否可以重新打开手柄?
还是不可能这样做?
因为我可以使用相同的方法并重新打开它:
with open("filename") as anotherfile
答案 0 :(得分:1)
很简单:重新打开文件:
with open("text.txt","r") as file:
#read some line
with open(file.name,"a") as file:
file.write("texte") # now it works
现在你在评论中提到:
我在函数调用中将此文件句柄作为参数传递,因此函数内部的文件名不可知,因此在函数内部无法使用相同的方法重新打开文件,这就是为什么我& #39; m询问如何重新打开文件句柄
现在这变得越来越混乱。一般规则是函数不应该关闭/重新打开它的调用者给出的资源,即:
def foo(fname):
with open(fname) a file:
bar(file)
def bar(file):
file.close()
with open(file.name, "a") as f2:
f2.write("...")
是不好的做法 - 这里bar
不应该关闭文件,只使用它 - 处置文件是foo
(或任何称为bar
的人)的职责。因此,如果您需要这样的图案,那么您的设计就会出现问题,并且您最好先修改设计。
请注意,您可以在不关闭第一个句柄的情况下打开文件以进行追加:
def bar(file):
with open(file.name, "a") as f2:
f2.write("...")
但这可能仍然会扰乱来电者的期望。