删除可能不存在的文件的最pythonic方式

19 浏览
0 Comments

删除可能不存在的文件的最pythonic方式

如果存在文件filename,我想要删除它。这样说是否妥当?

if os.path.exists(filename):
    os.remove(filename)

有没有更好的方法?一个一行的方法?

admin 更改状态以发布 2023年5月24日
0
0 Comments

我更喜欢抑制异常而不是检查文件是否存在,以避免TOCTTOU漏洞。Matt的回答是一个很好的例子,但是我们可以稍微简化一下,在Python 3中使用contextlib.suppress()

import contextlib
with contextlib.suppress(FileNotFoundError):
    os.remove(filename)

如果filename是一个pathlib.Path对象而不是字符串,我们可以调用它的.unlink()方法而不是使用os.remove()。 根据我的经验,Path对象比字符串更适用于文件系统操作。

由于这个答案中的所有内容都是专属于Python 3的,因此它提供了升级的又一个理由。

0
0 Comments

一种更加 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

0