仅使用Python文件对象删除文件
假设我打开一个之前不存在的文件,准备写入内容:
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
。