如何重新打开已关闭的文件?

DJA*_*ANE 6 python file

file我有一个打开的文件对象:

\n
with open("text.txt","rb") as file:\n    # read some line\n\nfile.write("texte")  # I know that doesn't work\n
Run Code Online (Sandbox Code Playgroud)\n

我只是想知道是否可以再次打开这个文件,因为Python有关于它的所有信息,但它说这个文件已关闭。\n我试图读取文件中的一些行,最后我会写文件末尾有一个新行,所以我想以追加模式重新打开该文件。

\n
>>> with open("test.txt","wb") as fich:\n...     fich.write("test In ")\n...\n>>> fich\n<closed file 'test.txt', mode \xe2\x80\x98wb' at 0x7f3f49a3a4b0>\n>>> fich.open\nTraceback (most recent call last):\n  File \xe2\x80\x9c<stdin>", line 1, in <module>\n
Run Code Online (Sandbox Code Playgroud)\n

我正在调用一个以文件句柄作为参数的函数,所以我不能第一次重用打开,因为文件的名称在函数内部是未知的。

\n

我可以重新打开手柄吗?因为我可以使用相同的方法并重新打开它:

\n
with open("filename") as anotherfile:\n
Run Code Online (Sandbox Code Playgroud)\n

bru*_*ers 4

很简单:重新打开文件:

with open("text.txt","r") as file:
    #read some line

with open(file.name,"a") as file:
    file.write("texte") # now it works
Run Code Online (Sandbox Code Playgroud)

现在您在评论中提到:

我将此文件句柄作为函数调用中的参数传递,因此函数内部不知道文件名,因此在函数内部不可能使用相同的方法重新打开文件,这就是为什么我问如何重新打开文件文件句柄

现在事情变得越来越混乱了。一般规则是函数不应关闭/重新打开调用者提供的资源,即:

def foo(fname):
    with open(fname) a file:
       bar(file)

def bar(file):
   file.close()
   with open(file.name, "a") as f2:
      f2.write("...")
Run Code Online (Sandbox Code Playgroud)

是不好的做法 - 这里不应该关闭文件,只使用它 - 处理文件是(或任何打电话的人)bar的职责。因此,如果您需要这样的模式,那么您的设计就有问题,您最好先修复您的设计。foobar

请注意,您可以打开文件进行附加,而无需关闭第一个句柄:

def bar(file):
   with open(file.name, "a") as f2:
      f2.write("...")
Run Code Online (Sandbox Code Playgroud)

但这可能仍然会扰乱呼叫者的期望。