Большинство pythonic способов удалить файл, который может не существовать




6 Answers

Я предпочитаю подавлять исключение, а не проверять наличие файла, чтобы избежать ошибки TOCTTOU . Ответ Мэтта - хороший пример этого, но мы можем немного упростить его под Python 3, используя contextlib.suppress() :

import contextlib

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

Если filename является объектом pathlib.Path вместо строки, мы можем вызвать его .unlink() вместо использования os.remove() . По моему опыту, объекты Path более полезны, чем строки для манипулирования файловой системой.

Поскольку все в этом ответе исключительно для Python 3, оно предоставляет еще одну причину для обновления.

python

Я хочу удалить filename если он существует. Правильно ли говорить

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

Есть ли способ лучше? Однострочный путь?




В духе ответа Энди Джонса, как насчет подлинной троичной операции:

os.remove(fn) if os.path.exists(fn) else None



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

является однострочным.

Многие из вас могут не согласиться - возможно, по таким причинам, как рассмотрение предполагаемого использования троянов «уродливое», но это ставит вопрос о том, следует ли нам слушать людей, привыкших к уродливым стандартам, когда они называют что-то нестандартное «уродливое».




Что-то вроде этого? Использует оценку короткого замыкания. Если файл не существует, все условие не может быть истинным, поэтому python не будет оценивать оценку второй части.

os.path.exists("gogogo.php") and os.remove("gogogo.php")



Предложение KISS:

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

А потом:

remove_if_exists("my.file")



Я бы просто использовал shutil

import shutil shutil.rmtree(filename, ignore_errors=True)




Related


Tags

python