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



Answers

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

import contextlib

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

filenameが文字列ではなくpathlib.Pathオブジェクトの場合、 .unlink()を使用する代わりに.unlink()メソッドを呼び出すことができます。 私の経験上、Pathオブジェクトはファイルシステムの操作のために文字列よりも便利です。

この答えのすべてはPython 3に限定されているので、アップグレードするもう一つの理由があります。

Question

ファイルfilenameが存在する場合は削除します。 言うべきことは適切ですか?

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

より良い方法がありますか? 一行の方法ですか?




os.removeはうまく動作するはずです。

import os
Input = input('File:')
File = Input.get()
try:
  os.remove(File)
except:
  none




アンディ・ジョーンズの答えの精神の中で、本物の三項演算についてはどうですか?

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



Mattの回答は、古いPythonsの場合は正しいもの、新しいものの場合はKevinの正解です。

silentremoveの関数をコピーしない場合、この機能はpath.pypath.pyとして公開されていremove_p

from path import Path
Path(filename).remove_p()



私は存在しないファイルを強制的に削除できるrmを使いたい。

rm --help | grep "force"
  -f, --force           ignore nonexistent files and arguments, never prompt
import os

os.environ['filename'] = filename;
os.system('rm -f $filename')



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

1ライナーです。

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




Links



Tags

python python