仅使用Python文件对象删除文件

14 投票
4 回答
25741 浏览
提问于 2025-04-17 04:45

假设我打开一个之前不存在的文件,准备写入内容:

f = open('/tmp/test.txt', 'w')

当这行代码执行后,文件 '/tmp/test.txt' 就被创建了。那么,有什么简单的方法可以只用文件对象(f)来删除这个文件,而不需要使用文件的路径呢?

4 个回答

4

你可以通过 name 这个成员来获取文件名,然后像往常一样删除它:

In [1]: f = open('/tmp/test.txt', 'w')

In [2]: f.name
Out[2]: '/tmp/test.txt'
10

完整回答:

f = open('/tmp/test.txt', 'w')
f.close()

os.remove(f.name)

在删除文件之前,你应该先关闭它(文档上说如果文件是打开的,在Windows系统下会抛出异常——我没有验证这个)。在你的例子中,f 只是一个文件的句柄。它并不是文件本身,所以你不能直接删除它。

30

你不能直接删除一个文件句柄,只能删除文件路径,因为多个路径可以指向同一个文件,而且有些文件(比如套接字)甚至没有路径。所以:

import os
f = open('/tmp/test.txt', 'w')
os.unlink(f.name)
# You can still use f here, it's just only visible for people having a handle.
# close it when you're finished.

不过,你不应该这样做 - 其实有更好的方法来解决你的问题。可以使用tempfile模块,它会自动删除文件,或者如果你只需要一个文件句柄而不在乎写入的内容,可以直接写入/dev/null

撰写回答