我想删除文件文件名,如果它存在。这样说合适吗

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

有没有更好的办法?一条线路?


当前回答

这是另一个解决方案:

if os.path.isfile(os.path.join(path, filename)):
    os.remove(os.path.join(path, filename))

其他回答

从Python 3.3开始,你可以使用FileNotFoundError,它比公认的版本更正确,因为它没有忽略其他可能的错误。

try:
    os.remove(filename)
except FileNotFoundError:
    pass

另一种了解文件(或多个文件)是否存在并删除它的方法是使用模块glob。

from glob import glob
import os

for filename in glob("*.csv"):
    os.remove(filename)

Glob找到所有可以使用*nix通配符选择模式的文件,并循环该列表。

献吻礼:

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

然后:

remove_if_exists("my.file")

os.path.exists对文件夹和文件都返回True。考虑使用os.path.isfile来检查文件是否存在。

我更倾向于抑制异常,而不是检查文件的存在,以避免TOCTTOU错误。Matt的回答是一个很好的例子,但我们可以在Python 3下使用contextlib.suppress()稍微简化它:

import contextlib

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

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

因为这个答案中的所有内容都是Python 3独有的,所以它提供了另一个升级的理由。