删除可能不存在的文件的最pythonic方式
删除可能不存在的文件的最pythonic方式
如果存在文件filename
,我想要删除它。这样说是否妥当?
if os.path.exists(filename): os.remove(filename)
有没有更好的方法?一个一行的方法?
admin 更改状态以发布 2023年5月24日
我更喜欢抑制异常而不是检查文件是否存在,以避免TOCTTOU漏洞。Matt的回答是一个很好的例子,但是我们可以稍微简化一下,在Python 3中使用contextlib.suppress()
:
import contextlib with contextlib.suppress(FileNotFoundError): os.remove(filename)
如果filename
是一个pathlib.Path
对象而不是字符串,我们可以调用它的.unlink()
方法而不是使用os.remove()
。 根据我的经验,Path对象比字符串更适用于文件系统操作。
由于这个答案中的所有内容都是专属于Python 3的,因此它提供了升级的又一个理由。
一种更加 Pythonic 的方法是:
try: os.remove(filename) except OSError: pass
虽然这需要更多的代码行数,看起来非常丑陋,但它避免了不必要的调用 os.path.exists()
,并遵循了 Python 惯例过度使用异常。
编写一个函数来实现这个过程可能是值得的:
import os, errno def silentremove(filename): try: os.remove(filename) except OSError as e: # this would be "except OSError, e:" before Python 2.6 if e.errno != errno.ENOENT: # errno.ENOENT = no such file or directory raise # re-raise exception if a different error occurred