上書き rename 存在しない可能性のあるファイルを削除するための最もpythonicな方法



6 Answers

TOCTTOUバグを避けるために、ファイルの存在をチェックするのではなく、例外を抑制することを好みます。 Mattの答えはこれの良い例ですが、 contextlib.suppress()を使ってPython 3の下で少し簡単にすることができます:

import contextlib

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

filenameが文字列ではなくpathlib.Pathオブジェクトの場合、 .unlink()を使用する代わりに.unlink()メソッドを呼び出すことができます。 私の経験上、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)

1ライナーです。

おそらく、三者の使用を「醜い」と考えるような理由から、あなたの意見が一致しないかもしれませんが、非標準的な「醜い」ものを呼び出すときに醜い基準に慣れた人々の話を聞かなければならないのかという疑問があります。




このようなもの? 短絡評価を利用します。 ファイルが存在しない場合、条件全体が真となることはありません。したがって、Pythonは2番目の部分の評価を邪魔しません。

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")



私はちょうどシャットルを使用する

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




Related


Tags

python