重新打开已关闭的文件python

时间:2018-05-30 14:17:53

标签: python file

我有一个文件对象"文件"我打开了:

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

1 个答案:

答案 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("...")

但这可能仍然会扰乱来电者的期望。